Eclipse 2018-09 不会编译 Java 11 源代码;认为它低于1.7

2022-09-03 07:39:13

我在Windows 10上运行Eclipse 2018-09(4.9.0)。我使用的是 Open JDK 11 GA。我有一个 Maven 项目,它被指定为使用 Java 8 源代码。

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

这在命令行上使用Maven 3.5.3编译良好。使用Eclipse Eclipse 2018-09(4.9.0)也可以很好地编译。

我将编译Java版本更改为Java 11:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <maven.compiler.source>11</maven.compiler.source>
  <maven.compiler.target>11</maven.compiler.target>
</properties>

这仍然可以在使用Maven 3.5.3的命令行上构建。但是在Eclipse 2018-09中,我到处都会遇到错误:

  • '<>' operator is not allowed for source level below 1.7
  • Constructor references are allowed only at source level 1.8 or above
  • Default methods are allowed only at source level 1.8 or above

你明白了。

我已经习惯于在Eclipse中更新我的Maven项目(和子项目)。我已经做了一个完整的清理和重建。Alt+F5

因为这在命令行上与Maven编译良好,所以这一定是一个Eclipse问题,不是吗?当然,Eclipse 还不支持所有新的 Java 11 功能,但此代码没有特定于 Java 11 的功能。怎么了?


答案 1

听起来Eclipse并没有从pom中获取版本。

我刚刚测试了您的pom配置并验证了它是否有效,方法是使用最新的Java 11支持Eclipse 2018-09插件,提供问题中的编译器源和目标属性或本答案中描述的新版本属性。

在 Eclipse 首选项中正确设置 JDK 11 非常重要。在“已安装的 JRE”首选项页面上添加 JDK 11,然后在“执行环境”首选项页面上将其与 JavaSE-11 匹配。否则,更新 Maven 项目将导致使用默认的 JDK,这可能是您遇到的问题。


答案 2

更新:Java 11 自版本 4.10(发布于 2018-12-19)以来已完全集成到 Eclipse 中,因此无需再安装此插件。


出于某种原因,您需要安装额外的Eclipse插件“Java 11支持Eclipse 2018-09(4.9)(即使在Eclipse Photon 4.9中)

它接缝了该插件在Eclipse Marketplace中不再可用。我有人找到它的安装网址,请在这里添加它:

适用于 Eclipse - STS 4.0.1(基于 Eclipse 4.9),Maven 3.6.0,使用此 Maven 编译器插件配置

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

推荐