使用appassembler-maven-plugin添加classpath以生成批处理文件

时间:2013-10-17 13:02:26

标签: maven plugins pom.xml appassembler

我正在使用mojo的appassembler。我需要做的是我必须在项目路径中添加项目的特定路径(比如%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 个答案:

答案 0 :(得分:0)

在许多情况下,例如允许使用不同的jdbc驱动程序或用户插件,这个问题非常有用。在我的情况下,我想有一个jrebel构建,因此我不得不更改类路径并通过构建目录切换jar。但我认为修改脚本以满足您的需求并不是很困难。请注意,您需要maven&gt; = 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>