Maven Java编译器版本

时间:2020-01-09 10:36:50  来源:igfitidea点击:

Maven使用的默认Java编译器版本是Java 1.5. 自从2004年发布Java 5以来,为什么仍然使用默认的Java编译器版本是个好问题。要使Maven使用较新版本的Java编译器编译Java代码,我们需要在项目的POM中明确指定Java编译器。文件(pom.xml)。

确切指定Java编译器版本的方式取决于我们使用的是Java 8或者更早版本,还是Java 9或者更高版本。从Java 9开始,Java获得了一些模块,这些模块在短期内会使编译有些复杂,但从长期来看应该会有所帮助。

适用于Java 8和更早版本的Maven Java编译器

从Java 8和更早版本开始,有两种方法可以在Maven POM文件中设置Java编译器版本:

  • 通过Maven Java编译器属性。
  • 通过Maven Java编译器"插件"。

以下各节将说明这两种在Maven中设置Java编译器版本的方法。

Maven Java编译器属性

在Maven POM文件中设置Java编译器版本的第一种,最新和最简单的方法是通过Maven Java编译器属性。这是Maven Java编译器属性的外观:

<properties>
  <maven.compiler.target>1.8</maven.compiler.target>
  <maven.compiler.source>1.8</maven.compiler.source>
</properties>

这些属性必须包含在POM文件的properties元素中。通常,我的POM文件中的最后一个元素是" properties"元素。

Maven Java编译器插件

通过Maven Java编译器插件在Maven POM文件中设置Java编译器版本的第二个,最古老且更冗长的内容。 Maven Java编译器插件的配置如下所示:

<build>
  <plugins>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.6.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

带有Java编译器版本集的完整Maven POM文件

为方便起见,这是使用上述两种机制设置的Java编译器版本的完整Maven POM文件。请注意,POM文件中仅应使用一种机制。该示例仅显示了两个示例,因此我们可以看到它们将在POM文件中放置的位置。

<project
 xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>

<modelVersion>4.0.0</modelVersion>

<groupId>com.nanosai</groupId>
<artifactId>grid-ops</artifactId>
<version>0.8.0</version>
<packaging>jar</packaging>

<dependencies>

  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>

</dependencies>

<build>
  <plugins>

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.6.1</version>
      <configuration>
        <source>1.8</source>
        <target>1.8</target>
      </configuration>
    </plugin>
  </plugins>
</build>

<properties>
  <project.build.sourceEncoding>
      UTF-8
  </project.build.sourceEncoding>
  <maven.compiler.target>1.8</maven.compiler.target>
  <maven.compiler.source>1.8</maven.compiler.source>
</properties>

</project>

适用于Java 9及更高版本的Maven Java编译器

对于Java 9和更高版本,我们需要使用Java编译器插件的细微变化。我们需要使用release属性来代替source和target属性。这是一个Maven Java编译器插件具有release属性的示例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>
    </configuration>
</plugin>

本示例在release属性中将Java版本设置为11. 在撰写本文时,Java 11是Java的最新长期支持(LTS)版本。

还要注意,Maven Java编译器插件的版本已从3.6.1更改为3.8.0。

请记住,升级到Java 9+时,我们很可能会遇到更多问题,例如确保Java项目使用的所有Maven插件和依赖项也与Java 9+兼容。但是,有关如何完成此操作的详细信息超出了本Maven Java编译器教程的范围。

启用预览函数

某些更高版本的Java版本(至少Java 10、12和13)具有一些预览函数。预览中的函数是Java SDK团队已实现但尚未确定是否应长期保留在Java SDK中的函数。默认情况下,Java SDK中未启用这些函数。要使用它们,必须显式启用它们。要在Maven POM文件中启用Java预览函数,如下所示,将CompilerArgs元素插入到编译器配置中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>11</release>
        <compilerArgs>--enable-preview</compilerArgs>
    </configuration>
</plugin>