在 GitHub 上叉我

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 工具链配置选项的完整文档。