Maven 编译错误:(使用 -source 7 或更高版本来启用菱形运算符)

Posted

技术标签:

【中文标题】Maven 编译错误:(使用 -source 7 或更高版本来启用菱形运算符)【英文标题】:Maven Compilation Error: (use -source 7 or higher to enable diamond operator) 【发布时间】:2015-05-29 06:28:47 【问题描述】:

我在 IntelliJ、JDK1.8、maven 3.2.5 中使用 maven。出现编译错误:使用 -source 7 或更高版本启用钻石歌剧。详情如下:

  [ERROR] COMPILATION ERROR : 
  [INFO] -------------------------------------------------------------
  [ERROR] TrainingConstructor.java:[31,55] diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond operator)
  [ERROR] DTM.java:[79,21] try-with-resources is not supported in -source 1.5  (use -source 7 or higher to enable try-with-resources)
  [ERROR] ticons.java:[53,44] diamond operator is not supported in -source 1.5  (use -source 7 or higher to enable diamond operator)

有什么建议吗?是否有任何其他配置来设置此 -source 级别?似乎它不使用java 1.8。

【问题讨论】:

你的 maven-compiler-plugin 配置怎么样? 什么是 JAVA_HOME 环境变量值? 从 maven 插件下拉列表中,我使用 org.apache.maven.plugins:maven-compiler-plugin:2.3 找到它 JAVA_HOME 环境变量设置为 java jdk 位置:C:\Program Files\Java\jdk1.8.0_40 【参考方案1】:

检查您的maven-compiler-plugin 是如何配置的,它应该使用java 7 或更高版本:

<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>

如需更完整的答案,请参阅the one below。

【讨论】:

谢谢。我将它们包含在 下的 POM 中。一些错误已经消失。还有一个编译错误:“Word.java:[17,22] > 预期”。对应的代码是:List defaultSW = Arrays.asList("a", "an", "and", "are")。有什么想法吗? 这条线List&lt;String&gt; defaultSW = Arrays.asList("a", "an", "and", "are");是正确的,你的问题出在别处 这是我在 java 文件中的唯一代码。对此错误消息有任何想法吗? 我建议您提出一个新问题并提供来源,因为当前有关 maven 的问题已解决。 @HappyCoding 如果它在第 17 行第 22 个字符上,它不是文件中唯一的代码...【参考方案2】:

你必须改变你的配置:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

您应该了解JavaC中source/taget选项与JDK 1.8/1.7等的用法的区别。

除此之外,你应该升级使用 maven-compiler-plugin。

【讨论】:

谢谢。还尝试了您建议的 3.2 版。仍然是一个错误“ java:[17,22] > expected ”。对应的代码片段是:List defaultSW = Arrays.asList("a", "an", "and", "are")。你知道这个问题吗?【参考方案3】:

如果您已经尝试过@Sergey Pauk 和@khmarbaise 解决方案,请查看设置 -> 构建、执行、部署 -> 编译器 -> Java 编译器,有特定模块的目标字节码版本

【讨论】:

不过不影响 Maven 构建。 是的,不过我认为这是值得注意的,我之前也遇到过类似的问题,我的 pom.xml 设置为使用 java 1.8 但我从 intellij-idea 编译了代码,我花了一段时间才解决找到目标字节码版本 - 它只是一个小提示【参考方案4】:

解决方案 1 - 在 pom.xml 中设置这些属性

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

解决方案 2 - 配置 Maven 编译器插件(始终在 pom.xml 中)

<build>
    
<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
    </plugin>
</plugins>
...

为什么会发生

问题出现是因为

[...] 目前默认源设置为 1.5,默认目标设置为 1.5,独立于您运行 Maven 的 JDK。 如果您想更改这些默认设置,您应该按照设置 Java 编译器的 -source 和 -target 中所述设置源和目标。

Maven Compiler Plugin Introduction (until version 3.3)

以及最新的 Maven 版本:

另外请注意,目前默认源设置为 1.6,默认目标设置为 1.6,与运行 Maven 的 JDK 无关。 强烈建议您通过设置源和目标来更改这些默认值,如设置 Java 编译器的 -source 和 -target 中所述。

Maven Compiler Plugin Introduction

这就是为什么更改 JDK 对源代码级别没有影响的原因。所以你有几种方法可以告诉 Maven 使用哪个源级别。

要使用的JDK版本?

如果您像本例一样设置目标 1.7,请确保 mvn 命令实际上是使用 jdk7(或更高版本)启动的

IDE 上的语言级别

IDE 通常使用 maven pom.xml 文件作为项目配置的来源。 更改 IDE 中的编译器设置并不总是对 Maven 构建产生影响。 这就是为什么,让项目始终可以使用 maven 进行管理(并且可以与其他 IDE 互操作)的最佳方法是编辑 pom.xml 文件并指示 IDE 与 maven 同步。

【讨论】:

我完全按照你写的做,但我仍然得到那个错误

以上是关于Maven 编译错误:(使用 -source 7 或更高版本来启用菱形运算符)的主要内容,如果未能解决你的问题,请参考以下文章

Maven包编译错误

IDEA JetBrains IntelliJ - 'make' 上的编译错误,但使用 Maven 编译时很好,并且 IntelliJ 在类文件中没有报告错误

Maven 未使用 Java 11 - 编译致命错误:目标版本无效:11

致命错误编译:找不到tools.jar - maven-compiler-plugin

Java Maven打包总结(Jenkins多模块编译部署)

使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法