1

我正在使用 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 中应该包含哪些更改?

4

1 回答 1

0

这个问题在许多情况下非常有用,例如允许不同的 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>
于 2014-03-07T12:34:17.527 回答