我安装了JDK 7和Eclipse 3.6M6。然后,我在Eclipse中添加了JRE 7作为新的JRE执行环境,并将编译器合规级别设置为Java 7。我可以使用JDK 7自带的
javac
通过命令行编译以下代码。
import java.util.HashMap;
import java.util.Map;
public class Try {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
}
}
但是,Eclipse 给出以下错误消息。
HashMap 类型的参数数量不正确;它不能用参数进行参数化 Try.java /TryJava7/src line 7 Java Problem
令牌“<", ? expected after this token Try.java /TryJava7/src line 7 Java Problem
存在语法错误”
尽管我已将编译器的合规级别设置为 Java 7,但 Eclipse 似乎还不理解 Java7 语法。可以在 Eclipse 中使用 Java 7 吗?
以下是
.classpath
的内容。
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
<classpathentry kind="output" path="bin"/>
</classpath>
并且,以下是
.settings/org.eclipse.jdt.core.prefs
的内容。
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7
正如 Alex 指出的,Eclipse 使用自己的编译器,目前不支持 Java 7,并且如 Helios 版 Eclipse 项目计划中所述,对 Java 7 的支持已推迟并与 3.6 版本分离:
( 推迟)添加对 Java SE 7 功能的支持。 下一个功能 Java SE 的发行版是版本 7, 可能会在 2010 年下半年。 本次发布的内容仍然 正在讨论中,该版本是 预计将包含扩展 Java语言,包括注释 类型 (JSR-308)、模块化支持 (JSR-294) 和其他小语种 变化(硬币项目)。日食Java 工具将包括初始支持 用于编译、编辑和启动 Java 7 的应用程序适用于那些 公开可用的部分 规格(仅 JSR-308 观点)。 [JDT 核心、JDT UI] (288548)
注意:为了调整我们的 与延迟的官方安排 Java 7 的出现和由于缺乏 公开的规格 (包括缺少 Java 7 JSR),我们 已决定搬迁开发 工作到一个单独的分支并解耦 从 3.6 版本开始。在那 我们将继续开发分支 Java 7 的新特性 可公开访问。我们将交付 官方单独更新 构建以便尽早提供 访问 Java 7 功能。
请参阅 http://wiki.eclipse.org/JDT_Core/Java7、http://wiki.eclipse.org/PDE/API_Tools/Java7 和 Bug 288548,了解 Eclipse 对 Java 7 的持续支持。有关如何在 Eclipse 中评估 Java 7 的说明,请参阅 http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29。
更新 1: BETA_JAVA7
分支已合并到
HEAD
和
R3_7_maintenance
(请参阅eclipse-dev 存档)。
更新2: Eclipse 3.7.1(Indigo SR1)支持Java 7。
Netbeans 应该可以工作。
Connection type: pserver
User: anonymous
Host: dev.eclipse.org
Port: Default
Repository path: /cvsroot/eclipse
Module: org.eclipse.jdt.core
Tag: JSR_308 (Branch)
然后,我按照说明在 eclipse 中安装了签出的 JDT。随后,我抬头
org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NegativeTypeAnnotationTest.java
,
/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/TestAll.java
提出练习 JSR 308 类型注释的小示例。此时,当存在类型注释时,分支支持并在 .class 文件中生成相应的新属性。但是,注释处理器似乎不起作用。
Eclipse 4.33(2024 年第 3 季度)中逐步取消:
删除了对源、目标和发行版 Java 7 及以下版本的支持
以下编译器选项现在仅支持 Java 8 及更高版本:
--source --target --release
即,从 Eclipse 4.33 开始,Eclipse IDE 和ecj 将不再能够生成 JRE 7(及更低版本)兼容的字节代码,因为上述选项仅支持 Java 8+。 这相当于 Java 21 的 javac 仅支持 Java 8+ 的那些选项。