这个问题在许多情况下非常有用,例如允许不同的 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>