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

Gar*_*son 15 java eclipse maven java-11 eclipse-2018-09

我在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>
Run Code Online (Sandbox Code Playgroud)

在命令行上使用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>
Run Code Online (Sandbox Code Playgroud)

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

你明白了.

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

因为这在命令行上使用Maven编译得很好,这必然是一个Eclipse问题,不是吗?当然,Eclipse不支持所有新的Java 11功能,但此代码没有Java 11特定功能.怎么了?

kap*_*pex 5

听起来 Eclipse 没有从 pom.xml 文件中获取版本。

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

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

  • 但是我已经在 Eclipse 中添加了 OpenJDK 11 作为默认 JRE(我在 /sf/ask/3676433071/ 中这样做了)。Eclipse 和 Java 11 似乎存在各种版本检测问题。您是否在我的错误报告 https://bugs.eclipse.org/bugs/show_bug.cgi?id=539570 上看到了所有开发人员的评论? (2认同)

Ral*_*lph 5

更新:自版本4.10(2018年12月19日发布)以来,Java 11已完全集成Eclipse中,因此不再需要安装此插件。


由于某些原因,您需要安装其他Eclipse插件“ Eclipse 2018-09(4.9)的Java 11支持(即使在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>
Run Code Online (Sandbox Code Playgroud)