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

2022-08-31 17:06:22

我在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。


答案 1

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

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

有关更完整的答案,请参阅下面的答案


答案 2

解决方案 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 编译器插件简介(至 3.3 版)

以及最近的 Maven 版本:

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

Maven 编译器插件介绍

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

要使用的 JDK 版本?

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

IDE 上的语言级别

通常,IDE 使用 maven pom.xml 文件作为项目配置的来源。在 IDE 中更改编译器设置并不总是对 maven 生成有影响。这就是为什么,保持项目始终可与 maven(并可与其他 IDE 互操作)的最佳方式是编辑 pom.xml文件并指示 IDE 与 maven 同步。


推荐