如何修复这个错误:class文件版本为52.0,应该是49.0。

8

我真的很苦恼。我一直无法配置Intellij使用Javac,也无法运行javadoc。在Mac OSX上,我似乎无法让我的Java运行时环境保持稳定并高效地工作。

我创建了一个最基本的示例 -hello world程序,但它仍然会从命令行中出现错误。我读到的所有关于这个错误的信息都告诉我要“升级编译器”。但我真的不确定问题是什么,javac和java都在运行1.8(现在,在我尝试升级系统JVM之后)。

我在调用javac时明确设置了路径,并检查了版本等。一切都告诉我它是1.8

有人能解释如何修复这个问题吗?(不要回退我的系统到1.5 SDK)。

这是基本 hello world 应用程序的输出:

$JAVA_HOME/bin/javac Main.java
Main.java:3: cannot access java.lang.Object
bad class file: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/jre/lib/rt.jar(java/lang/Object.class)
class file has wrong version 52.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public class Main {
       ^
1 error
localhost:mycompany$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
localhost:mycompany$

javac版本输出:

javac -version
javac 1.8.0_45
javac: no source files
Usage: javac <options> <source files>

Java版本输出:

java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

你的“javac输出”实际上是来自$JAVA_HOME/bin/javac吗? - Paolo
没错,是一样的。 $JAVA_HOME/bin/javac -version javac 1.8.0_45 javac:没有源文件 用法:javac <选项> <源文件> - Richard G
2个回答

8
错误信息意味着您尝试在Java 5 VM中加载Java 8类。
由于未知原因,$JAVA_HOME/bin/javac正在使用JDK 8 Java运行时(.../rt.jar),但编译器本身是由Java 5 VM加载的。
我的下一步将是确保$JAVA_HOME/bin/javac实际上是它应该是的(而不是执行某些奇怪操作的脚本)。我还会检查环境变量(CLASSPATH)和选项,如-Xbootclasspath。尝试使用set | grep -i javaset | grep -i path查找可疑变量。
如果仍然无法解决问题,请尝试重新安装Java 8 SDK。

谢谢,我想我解决了——在Verbose模式下运行时,在Java/Extensions文件夹中有一些奇怪的东西,这个条目在classpath中:/Library/Java/Extensions/bcprov-jdk15-143.jar——根据名称判断,我想那就是问题所在了。我不记得那个库是什么,但我从扩展直接删除了所有包,现在它可以工作了... - Richard G
这就是你需要的用于在Java 5中使加密工作的Bouncy Castle。这个JAR不应该有问题。我的猜测是,里面可能还有另一个包含Java运行时的JAR。 - Aaron Digulla

4

我在尝试使用ant构建Arduino IDE时,也遇到了完全相同版本的问题。解决方法是从/Library/Java/Extensions/中删除旧版本的tools.jar - 只是想为其他遇到相同问题的人澄清一下。


刚刚在Mojave上遇到了同样的问题,但是唯一剩下的文件是/System/Library/Java/Extensions/MRJToolkit.jar,看起来它是随着Mojave安装的。从逻辑上讲,这不应该引起问题,而且其他所有文件都来自正确的目录。哦,还有这个系统目录即使使用sudo也无法更改。 - Owen Godfrey

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