使用不同 JDK 的最佳方式是使用工具链机制。在项目的构建过程中,没有工具链的 Maven 将使用 JDK 执行各种步骤,例如编译 Java 源代码、生成 Javadoc、运行单元测试或签署 JAR。这些插件中的每一个都需要 JDK 的工具来运行:javac、javadoc、jarsigner等。工具链是一种指定 JDK 路径的方法,以集中方式用于所有这些插件,独立于运行的插件maven本身。
要进行设置,请参阅使用工具链的指南,它使用了Maven 工具链插件。
使用 maven-toolchains-plugin,您可以为所有相关的 maven-plugin 配置 1 个默认 JDK 工具链。由于 maven-compiler-plugin 3.6.0 与 Maven 3.3.1+ 一起使用时,还可以为插件提供自己的工具链,这在每个执行块调用不同 JDK 的情况下很有用(例如,测试源需要不同的编译器与主要来源相比)。
在工具链之外,仍然可以告诉 Compiler Plugin 在编译期间要使用的特定 JDK。请注意,此类配置将特定于该插件,不会影响其他插件。
compilerVersion参数可用于指定插件将使用的编译器版本。但是,您还需要将fork设置为true才能正常工作。例如:
<project>
[...]
<build>
[...]
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable><!-- path-to-javac --></executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
[...]
</build>
[...]
</project>为避免硬编码可执行文件的文件系统路径,您可以使用属性。例如:
<executable>${JAVA_1_4_HOME}/bin/javac</executable>然后每个开发人员在settings.xml中定义这个属性,或者设置一个环境变量,以便构建保持可移植性。
<settings>
[...]
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>
</profiles>
[...]
<activeProfiles>
<activeProfile>compiler</activeProfile>
</activeProfiles>
</settings>如果您使用不同的 JDK 构建,您可能需要自定义jar 文件清单。