java.lang.UnsupportedClassVersionError:.class文件中的版本号错误?


140

当我包含必须从源代码编译的开源库时,出现此错误。现在,网络上的所有建议都表明该代码是在一个版本中编译并在另一版本(旧版本中是新版本)中执行的。但是,我的系统上只有一个JRE版本。如果我运行命令:

$ javac -version
javac 1.5.0_18

$ java -version
java version "1.5.0_18"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)
Java HotSpot(TM) Server VM (build 1.5.0_18-b02, mixed mode)

并在Eclipse中检查Java库的属性,我得到 1.5.0_18

因此,我必须得出结论,类本身内部的其他东西会引发异常?那有可能吗?


2
您是否可能在类路径中的其他地方有该库的编译版本?
杰夫·斯托里

好主意,但是没有。我通过使用'find'进行了检查。名称'* .jar'| xargs从JAR的lib文件夹中找到”。此外,我不认为Eclipse使用了CLASSPATH吗?还有其他好的建议吗?
grmn.bob 2010年

如何在cmd上使用此find -name'* .jar'命令,因为我希望再次重建jre src代码...为此,我需要触发此cmd ..... javalobby.org/java/forums /t103334.html .....我的 jdk位于C:\ Program Files \ Java \ jdk1.6.0_31
学习者

Answers:


185

我了解到这样的错误消息通常是正确的。如果无法(按您的想法)(如您所报告的)错误所指示的那样,您就去寻找另一个领域的问题...只是几小时后才发现原来的错误消息确实是正确的。

由于您使用的是Eclipse,因此我认为Thilo正确。得到此消息的最可能原因是因为您的一个项目正在编译1.6类。如果系统上只有1.5 JRE没关系,因为Eclipse有自己的编译器(不是javac),并且只需要1.5 JRE即可编译1.6类。这可能很奇怪,并且需要取消设置才能允许这样做,但我只是设法做到了。

对于有问题的项目,请检查“ Java编译器”部分的“项目属性”(通常是Alt + Enter)。这是配置为编译1.6,但仅带有1.5 JRE的项目的图像。

在此处输入图片说明


完全同意……这就是为什么我在评论中提出了查明方法的问题。我不知道Eclipse内部类。该库是使用“ javac”在命令行上编译的,并已集成到我的Eclipse项目中。我将尝试从命令行编译我的项目。您过去显然已经解决了这个问题,并且您的建议很棒。
grmn.bob 2010年

3
如果您拥有JDK(包含源代码),则应该能够在Eclipse中添加一些断点,并希望看到它试图加载的类。最简单的方法可能是UnsupportedClassVersionError的构造函数中的断点(或Eclipse异常断点,“ J!”图标),然后您可以检查它如何到达那里。
约书亚·麦金农

好。我在建筑物中找到了一位专家,他能够将Eclipse指向与我的命令行相同的JRE。然后,我针对1.6进行了重建,针对1.6进行了运行,一切正常。显然,除了1.5之外,我错了。他给我看了看哪里。感谢您的帮助-现在我要解决下一个问题!:)
grmn.bob 2010年

2
我遇到过同样的问题。我犯的错误是我正在使用1.5 JRE和1.6编译器。哪个没有解决unsupportedclassversion错误。因此,我在Eclipse中安装了1.6 JRE,并使用了1.6编译器。然后,一切开始正常。
Vanchinathan Chandrasekaran,2010年

1
我想第二次投票,因为这是我第二次遇到问题,进行搜索,找到了答案,这是正确的。> _ <
AlbeyAmakiir 2013年

9

您是否尝试过完整的“清理”,然后在Eclipse中重建(Project-> Clean ...)?

您是否可以直接在命令行中使用“ javac”和“ java”进行编译和运行?这样工作正常吗?

如果右键单击项目,请转到“属性”,然后转到“ Java构建路径”,在任何选项卡下是否都存在可疑条目?这实际上是您的CLASSPATH。

在Eclipse首选项中,您可能还需要仔细检查“ Java”部分中的“ Installed JRE”部分,并确保它与您认为的相符。

您肯定是在某个地方放置了一个过时的.class文件,或者正在使用的Java版本中出现编译时/运行时不匹配的情况。


是的(完全清洁);尚未尝试过(从cmd行中投影);可能/否(我从Eclipse“ Java Build Path”中删除了条目);做到了(JRE-这是我获得版本号的地方)。
grmn.bob,2010年

5

您使用Eclipse编译过吗?它使用不同的编译器(不是javac)。那应该不会导致这个错误(如果一切都配置正确),但是您可以尝试使用javac进行编译。

如果这样可以解决问题,请尝试查看Eclipse是否有一些不正确的编译器设置。专门针对Java 5。


那就是我正在学习的东西。我将尝试以相同的方式(cmd行和/或月食)构建两个部分。
grmn.bob,2010年

1
谢谢Thilo,今天我对Eclipse和Java以及类版本有了很多了解。还有一点关于蚂蚁的知识
grmn.bob 2010年

2

我也遇到同样的错误。原因是我使用Maven编译项目。我的JAVA_HOME指向JDK7,因此使用Java 1.7进行编译,并且在运行项目时使用JDK1.5。更改.classpath文件中的以下条目或如屏幕截图中所示的eclipse中的更改解决了此问题。

classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5

或将Eclipse的运行配置更改为 在此处输入图片说明


1

还要检查项目中为Java的更高版本编译的所有jar文件。如果这些是您自己的库,则可以通过将目标版本属性更改为javac来解决此问题。

<javac destdir="${classes.dir}"
            debug="on" classpathref="project.classpath" target="1.6">

0

发生这种情况的另一种情况是从主机Eclipse启动Eclipse实例(用于调试等)时,在这种情况下,仅更改项目的类路径或项目的类路径上的JRE库无济于事。重要的是用于启动目标蚀环境的JRE。


0

还要经常检查明显的地方。当我不小心为服务器的添加和删除操作获取了错误的资源时,就收到了此错误。这很容易忽略。


0

从项目文件夹中删除项目特定的设置文件(Eclipse工作区/项目文件夹/.settings/)也可以。显然,我们需要删除后清理并构建项目。


0

更改项目以使用Java 1.7:为此,请执行以下步骤:

  • 更改编译器合规性级别
  • 将项目JRE / JDK更改为相同级别(在我的情况下为1.7)
  • 在您的项目引用的所有项目中进行相同的更改
  • 更改运行/调试配置以使用JRE / JDK(或相同级别)

不行吗

  • 删除项目Bin目录
  • 清洁
  • 重建

还是行不通?

在项目目录中:编辑.settings / org.eclipse.jdt.core.prefs>确保已应用目标级别

祝好运!


0

我通过更改服务器所需的jre解决了这个问题(在我的情况下是tomcat)。在eclipse中的“服务器”选项卡中,双击服务器(以打开用于服务器配置的页面),单击运行时环境,然后更改所需的JRE

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.