【问题标题】:Maven Java compiler - compilation error using wrong compliance versionMaven Java编译器 - 使用错误的合规版本编译错误
【发布时间】:2017-07-13 23:18:11
【问题描述】:

当从 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 目标继续尝试安装符合 1.5 标准。

【问题讨论】:

标签: java maven compiler-errors


【解决方案1】:

将此插件添加到您的 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>

【讨论】:

【解决方案2】:

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

<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 version (source/target)的另一个选项可以通过:

<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 父级固定插件版本并且只提供上述属性,则可以省略 pluginManagement。

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这个属性不是从我知道的任何插件中获取的?
    猜你喜欢
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2020-03-10
    • 2012-10-28
    相关资源
    最近更新 更多