从Eclipse运行Ant时出现UnsupportedClassVersionError错误

5

我试图从eclipse运行一个ant脚本,但它失败并显示以下信息:

BUILD FAILED
project_path/build.xml:5:
java.lang.UnsupportedClassVersionError: com/sun/tools/javac/Main :
Unsupported major.minor version 51.0

然而,当我从命令行运行它时(./ant),它按预期运行。
环境信息:
  • 操作系统:Linux Mint 64
  • Eclipse:Juno(4.2.1)
  • JDK:Oracle 1.7.0_11
  • Ant(命令行):1.8.2
我还将“Ant Home”(在Eclipse设置中)设置为与我从命令行使用的相同。
我已经在这个问题上进行了大量搜索,但我似乎找不到任何有用的东西,我可以尝试卸载当前安装的所有Java(JDK / JRE),然后重新安装Java 7,但我不想走这条路。
有什么想法吗? 谢谢!
3个回答

11

UnsupportedClassVersionError: com/sun/tools/javac/Main : 不支持的 major.minor 版本 51.0

这表明版本出现了混淆,Ant 正试图在 Java 6 JVM 上运行 Java 7 的 javac。请检查项目属性、构建器、Ant 构建器,并检查类路径部分。在我新建的 Ant 构建器中,用户条目->附加任务和支持下有来自我的 1.7 JDK 的 tools.jar。如果你也有相同的情况,但是你的 Eclipse 本身运行在 Java 6 上,则无法正常工作。你可以通过 "关于 Eclipse " 对话框下的安装详细信息->配置找出 Eclipse 本身正在运行的 Java 版本。这可能与你的项目配置使用的 Java 版本不同。

另一种可能解决问题的方法是进入 Ant 构建器设置中的 JRE 标签,并告诉它在单独的 JRE 中运行,而不是在 Eclipse 进程内运行。


我的电脑上默认的Java版本是7,Eclipse也在使用Java 7,尽管兼容级别设置为6(将其更改为7不会影响错误)。我还拥有Java 7下的tools.jar工具包。 - Nitzan Tomer
@NitzanTomer 在单独的进程中运行 Ant 有帮助吗? - Ian Roberts
你说的“独立进程”是什么意思?当我在命令行中运行它(那是一个独立的进程),它可以正常工作,但如果你指的是在Eclipse中以某种方式运行它在一个独立的进程中,那我不太清楚你的意思。 - Nitzan Tomer
在Ant构建器设置中的JRE选项卡中,默认情况下为“在与工作区相同的JRE中运行”,但您可以选择“单独的JRE”来代替。 - Ian Roberts
哦,是的,我已经勾选了“始终在与工作区相同的JRE中运行新的Ant配置”框,这就是你所说的吗? - Nitzan Tomer
显示剩余2条评论

1

您的Eclipse ant任务尝试使用早于Java7 JDK/JRE版本的JDK编译器。请确保您使用Java7 JRE来运行Eclipse。


是的,我也这么想。不过,尝试点击“帮助”->“关于 Eclipse”->“安装详细信息”,然后查找“java.version=…”和/或“java.runtime.version=…” - Anders R. Bystrup
是的,它按预期运行,它显示:java.version=1.7.0_11 - Nitzan Tomer
奇怪。我从其他答案/评论中了解到,您的Ant构建也在JRE选项卡上选择了JRE7?您尝试过调整它吗? - Anders R. Bystrup
抱歉...正在尝试其他选项。 - Anders R. Bystrup
1
哈!好的,我漏掉了一些东西。在“外部工具配置”中有一个JRE选项卡,你和Ian谈到过,我之前不知道这个。现在我找到了它,错误已经消失了。我会接受Ian的答案,因为这部分内容在他的原始答案中提到,而不是在评论中,这将使其他遇到这个问题的人更容易解决。非常感谢你们的帮助! - Nitzan Tomer
显示剩余2条评论

0
通常情况下,如果您在Java 1.7中编译Java程序,则会创建主版本为51.0的类文件,如果您在较低版本的Java上运行该程序,则会出现问题。
 java.lang.unsupportedclassversionerror unsupported major.minor version 51.0

请查看this帖子以获取更多相关细节


1
在这种情况下,版本不受支持的类是 com.sun.tools.javac.Main - 这是位于 JDK 的 tools.jar 中的 Java 编译器。 - Ian Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接