Добавление classpath с помощью appassembler-maven-plugin для генерации командного файла

Я использую appassembler от mojo. Что мне нужно сделать, это я должен добавить перикулярный путь проекта (скажем, %BASEDIR%\resources) к пути к классам, в настоящее время он добавляет только %REPO% в путь к классу. Какие изменения я должен сделать в моем pom.xml. Я уже предоставил ниже код.

<configurationDirectory>/some/path</configurationDirectory>
<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>

И выходной пакетный файл содержит

set CLASSPATH=%BASEDIR%\\..\SOME\PATH;%REPO%\abc.jar

Какой у меня мой окончательный результат должен быть...

set CLASSPATH=%BASEDIR%\\..\SOME\PATH;%REPO%\abc.jar;%BASEDIR%\resources

Какие изменения следует включить в мой pom.xml для достижения вышеуказанного результата?

1 ответ

Этот вопрос действительно полезен во многих случаях, таких как использование различных драйверов jdbc или пользовательских плагинов. В моем случае я хотел получить сборку jrebel, и поэтому мне пришлось изменить путь к классу и переключить jar в соответствии с каталогом сборки. Но я думаю, что не очень сложно модифицировать скрипт под свои нужды. Обратите внимание, что вам нужен maven >= 3.0.3, поскольку начиная с maven 3.0.3 все ваши плагины выполняются в том же порядке, что и в вашем pom.xml. Так что ставьте этот плагин сразу после вызова вашего плагина appassembler.

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.3.1</version>
    <executions>
      <execution>
        <id>enforce-beanshell</id>
        <phase>package</phase>
        <goals>
          <goal>enforce</goal>
        </goals>
        <configuration>
          <rules>
            <evaluateBeanshell>
              <condition>
                  import java.io.File;
                  import java.nio.file.*;
                  import java.nio.charset.Charset;
                  import java.nio.charset.StandardCharsets;

                  print("replace jrebel classpath in ${basedir}/dist/bin/rebelServer");
                  Path path = Paths.get("${basedir}/dist/bin/rebelServer", new String[]{});
                  Charset charset = StandardCharsets.UTF_8;

                  String content = new String(Files.readAllBytes(path), charset);
                  content = content.replaceAll(
                    "\"\\$REPO\"/kic/engine/CoreEngine/[^/]+/CoreEngine\\-[^;:/]+\\.jar", 
                    "${basedir}/build/classes");

                  Files.write(
                    path, 
                    content.getBytes(charset),
                    new OpenOption[]{StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING,StandardOpenOption.WRITE}
                  );

                  true;
              </condition>
            </evaluateBeanshell>
          </rules>
          <fail>false</fail>
        </configuration>
      </execution>
    </executions>  
  </plugin>
Другие вопросы по тегам