50

我安装了JDK 7Eclipse 3.6M6。然后,我在 Eclipse 中添加了 JRE 7 作为新的 JRE 执行环境,并将编译器合规级别设置为 Java 7。我可以使用javacJDK 7 附带的命令行编译以下代码。

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 第 7 行 Java 问题进行参数化

标记“<”的语法错误,?预计在此令牌之后 Try.java /TryJava7/src 第 7 行 Java 问题

尽管我已将编译器的合规级别设置为 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
4

5 回答 5

40

正如 Alex 所指出的,Eclipse 使用其自己的编译器,该编译器目前不支持 Java 7,并且如Eclipse 项目的项目计划中所述,版本 Helios对 Java 7 的支持被推迟并与 3.6 版本分离:

  • (新的)延迟)添加对 Java SE 7 功能的支持。Java SE 的下一个功能版本是版本 7,可能会在 2010 年下半年推出。虽然此版本的内容仍在讨论中,但预计该版本将包含 Java 语言的扩展,包括类型注释(JSR-308)、模块化支持 (JSR-294) 和其他小的语言更改(Coin 项目)。Eclipse Java 工具将包括为那些具有公开可用规范(此时仅 JSR-308)的部分编译、编辑和启动 Java 7 应用程序的初始支持。[JDT 核心、JDT 用户界面] ( 288548 )

    注意:为了使我们的日程安排与延迟的 Java 7 正式发布相一致,并且由于缺乏公开可用的规范(包括缺乏 Java 7 JSR),我们决定将开发工作转移到一个单独的分支,并将其与3.6 发布。在该分支中,我们将继续开发 Java 7 功能,因为它们可以公开访问。我们将为官方构建提供单独的更新,以便提供对 Java 7 功能的早期访问。

于 2010-04-14T17:00:28.220 回答
18

请参阅http://wiki.eclipse.org/JDT_Core/Java7http://wiki.eclipse.org/PDE/API_Tools/Java7Bug 288548,了解 Eclipse 对 Java 7 的持续支持。请参阅http://wiki .eclipse.org/JDT/Eclipse_Java_7_Support_%28BETA%29获取有关如何在 Eclipse 中评估 Java 7 的说明。

更新 1:分支BETA_JAVA7已合并到HEADR3_7_maintenance(参见eclipse-dev 存档)。

更新 2: Eclipse 3.7.1 (Indigo SR1) 支持 Java 7

于 2011-02-02T15:39:15.970 回答
6

Eclipse 有自己的嵌入式 Java 编译器。因此,如果没有 eclipse beta 或类似的东西已经可以编译 Java 7,那么你就不走运了。

Netbeans应该可以工作。

于 2010-04-14T15:38:45.933 回答
3

我使用以下 CVS 存储库信息检查了 org.eclipse.jdt.core 的所谓 JSR 308 分支。

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 文件中生成相应的新属性。但是,注释处理器似乎不起作用。

于 2010-05-19T20:08:52.513 回答
2

Java 7 支持 (BETA) 现在在 JDT 中可用。见http://thecoderlounge.blogspot.com/2011/06/java-7-support-in-eclipse-jdt-beta.html

于 2011-06-28T19:35:50.090 回答