JAVA_HOME 中的 Java 9
$ export JAVA_HOME=/path/to/jdk9 $ mvn test
使用 JDK 已弃用的模块
从 Java 9 开始,一些以前与 JDK 捆绑在一起的模块默认被禁用。
该插件的 2.20.1 版本自动向分叉 JVM 的命令行添加了“–add-modules java.se.ee”选项(除非用户已经指定),以简化应用程序向 Java 9 的过渡。
从 2.21 开始,插件将不再添加该选项:使用这些模块的推荐方法是添加此类库的维护版本的显式依赖项。
这是与 Java 8 捆绑在一起的版本的参考:
公地注释
javax.annotation:javax.annotation-api:1.3.1
JavaBeans 激活框架
javax.activation:javax.activation-api:1.2.0
Java 事务 API
javax.transaction:javax.transaction-api:1.2
JAXB
javax.xml.bind:jaxb-api:2.3.0
org.glassfish.jaxb:jaxb-runtime:2.3.0(实现)
JAX-WS
javax.xml.ws:jaxws-api:2.3.0
com.sun.xml.ws:jaxws-rt:2.3.0(实现)
其中每一个的源代码都保存在https://github.com/javaee
在插件配置中通过 Toolchains API 选择 JDK
<configuration> [...] <jdkToolchain> <version>11</version> <vendor>sun</vendor> </jdkToolchain> [...] </configuration>
上面的示例假定您的toolchains.xml包含具有这些值的有效条目。
<toolchains xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd"> <toolchain> <type>jdk</type> <provides> <version>1.8</version> <vendor>sun</vendor> <id>jdk8</id> </provides> <configuration> <jdkHome>/path/to/openjdk8</jdkHome> </configuration> </toolchain> <toolchain> <type>jdk</type> <provides> <version>11</version> <vendor>sun</vendor> <id>jdk11</id> </provides> <configuration> <jdkHome>/path/to/openjdk/11</jdkHome> </configuration> </toolchain> </toolchains>
插件配置中的 Java 9
该插件为您提供了配置参数jvm,可以指向JDK中可执行Java的路径,例如:
<configuration> <jvm>/path/to/jdk9/bin/java</jvm> </configuration>
现在您可以在 Java 9 之上运行带有测试的构建。
这是非常不推荐的配置,因为该解决方案直接使用 JDK 指定路径,因此无法顺利转移到其他构建系统。
带有 JDK 9 的 Maven 工具链
从3.0.0-M5版本开始,您可以使用标准方式在插件执行过程中切换 JDK。有关更多信息,请参阅“在插件配置中通过工具链 API 选择 JDK”一章。
插件maven-toolchains-plugin应该与旧版本的 Surefire 或 Failsafe 插件一起使用。在此示例中,您可以看到如何在整个构建中(在 Windows 上)通过 Toolchain (-t ...)切换 JDK。
$ mvn -t D:\.m2\toolchains.xml test
如果没有(-t ...),工具链应该位于${user.home}/.m2/toolchains.xml中。
toolchains.xml的内容如下,但是可以指定多个不同的 JDK。
<toolchains xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd"> <toolchain> <type>jdk</type> <provides> <version>9</version> <vendor>oracle</vendor> <id>jdk9</id> </provides> <configuration> <jdkHome>/path/to/jdk9</jdkHome> </configuration> </toolchain> </toolchains>
您的 POM 应指定仅激活toolchains.xml中指定版本9的特定 JDK 的插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-toolchains-plugin</artifactId> <version>1.1</version> <executions> <execution> <phase>validate</phase> <goals> <goal>toolchain</goal> </goals> </execution> </executions> <configuration> <toolchains> <jdk> <version>9</version> </jdk> </toolchains> </configuration> </plugin>
现在您可以在 Java 9 之上运行带有测试的构建。
另请参阅surefire 工具链配置选项的完整文档。