【问题标题】:Compilation error during mvn -installmvn -install 期间的编译错误
【发布时间】:2016-06-13 06:09:03
【问题描述】:

我已经尝试了 mvn install 和 mvn clean install 并且它们都抛出了相同的错误:

[Error] *dir/class.java* try-with-resources is not supported in -source 1.5

这是我的环境信息:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /opt/maven
Java version: 1.8.0_77-debug, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.77-0.b03.el6_7.x86_64-debug/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-431.23.3.el6.x86_64", arch: "amd64", family: "unix"

是不是因为 maven 在 java 1.5 而不是 1.8 上运行?如果是这样,有没有办法改变maven使用的版本?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    如果您使用仅在特定 Java 版本中可用的 Java 功能,您应该在 pom.xml 中声明它

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

    当你运行mvn时,适当的JDK应该在PATH中。

    例如

    JDK_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.77-0.b03.el6_7.x86_64-debug/
    export PATH=${JDK_HOME}/bin:${PATH}
    mvn <your_maven_parameters>
    

    【讨论】:

      【解决方案2】:

      将 java 版本更改为 1.7 或更高版本

      你可以在 pom 中覆盖版本

              <plugin>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
      

      在 spring-boot 项目中,您可以覆盖属性中的版本

      <properties>
          <java.version>1.8</java.version>
      </properties>
      

      【讨论】:

        【解决方案3】:

        try-with-resources 仅适用于 java 1.7。为此,您需要使用源 java 版本 >=1.7 和目标版本 >= 1.7(即 >= $source.version)

        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.1</version>
              <configuration>
                <source>1.7</source>
                <target>1.7</target>
              </configuration>
        </plugin>
        

        【讨论】:

          【解决方案4】:

          这与 Linux 无关。您遇到的唯一问题是您使用的是由 Java 7 引入的try-with-resource,默认情况下,maven 配置为使用 1.5 规范编译 java 源代码。如果您需要使用try-with-resource 功能,如@UUID 指定,您可以配置maven-compiler-plugin 使用源和目标1.7 进行编译

          是不是因为 maven 运行在 java 1.5 而不是 1.8?

          不,Maven 可以在任何 Java 版本上运行(我不知道 Maven 不运行哪个版本的 Java)。但是我认为 Maven 可以编译的最高版本取决于运行 Maven 的 Java 版本。 IE。如果您的 maven 在 JDK 7 上运行,那么源和目标的最大版本也是 Java 7。

          【讨论】:

          • Maven本身运行的Java版本(3.3.X最低1.7)与可用于编译/测试等无关。为此您可以配置工具链。跨度>
          【解决方案5】:

          您的 java -version 返回了正确的 Java 8 版本, Java 版本:1.8.0_77-debug,供应商:甲骨文公司 确保您的 javac -version 也正确返回 Java 版本:1.8.0_77-debug,供应商:Oracle Corporation。

          【讨论】:

          • 如果未指定,Maven 编译器插件默认使用 Java 1.5。
          猜你喜欢
          • 2014-02-15
          • 2019-08-22
          • 1970-01-01
          • 2015-10-01
          • 2018-09-05
          • 1970-01-01
          • 1970-01-01
          • 2017-10-10
          • 2013-07-07
          相关资源
          最近更新 更多