Maven Java 编译器 - 使用错误的合规性版本的编译错误



从Eclipse运行安装时,我们没有问题,因为编译器版本设置为1.8。

在终端中运行 mvn install 时,我们收到以下错误。

ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project servicehelper: Compilation failure
[ERROR]   try-with-resources is not supported in -source 1.5
[ERROR]   (use -source 7 or higher to enable try-with-resources)
[ERROR]

使用 mvn install -X 时,我们看到 -target 1.5

然而,这是我的java和javac版本

mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T14:39:06-05:00)
Maven home: /usr/local/Cellar/maven/3.5.0/libexec
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.12.5", arch: "x86_64", family: "mac"
java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
javac -version
javac 1.8.0_131

我似乎从我运行的每个版本中,我们应该符合 1.8 标准,但 maven target 继续尝试以 1.5 合规性进行安装。

将此插件添加到您的pom.xml文件中。

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

要走的方法是首先定义所用插件的版本,这意味着:

<project>
<build>
<pluginManagement>
<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>
</pluginManagement>
</build>
</project>

您应该始终固定插件版本,这意味着构建中所有使用的插件。

定义 java 版本(源/目标(的另一个选项可以通过以下方式完成:

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

或者,如果您已经通过公司pom父级固定了插件版本,并且仅提供上述属性,则可以省略插件管理。

如果你必须用另一个JDK运行Maven,而不是你需要编译/测试你的代码,你需要通过工具链

或者你可以定义编译器以通过fork选项使用,这意味着在你的pom文件中硬编码JDK的位置,这不是一个好主意。

您可以尝试在pom上添加标签java.version.xml

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