不支持 ClassVersionError: . class 文件中的错误版本号?

当我包含一个必须从源代码编译的开源库时,我得到了这个错误。现在,Web 上的所有建议都表明,代码是在一个版本中编译的,并在另一个版本中执行(旧版本中新版本)。但是,我的系统上只有一个版本的 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

因此,我必须得出另一个结论,一个类本身的内部,是否抛出了异常? ? 这可能吗?

399023 次浏览

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

如果这解决了问题,那么试着查看 Eclipse 是否有一些不正确的编译器设置。特别是它的目标是 Java5。

您是否尝试过在 Eclipse (Project-> Clean...)中执行完整的“ Clean”然后重新构建?

你能够直接从命令行编译和运行“ javac”和“ java”吗?这样可以吗?

如果您右键点击您的项目,进入“属性”,然后进入“ Java 构建路径”,是否有任何可疑的条目在任何选项卡?这基本上就是您的 CLASSPATH。

在 Eclipse 首选项中,您可能还需要再次检查“ Java”部分中的“ Installated JRE”部分,并确保它与您认为应该匹配的内容相匹配。

你肯定有一个不新鲜的。类文件放在某个地方,或者您正在使用的 Java 版本中出现编译时/运行时不匹配。

我了解到这样的错误消息通常是正确的。当它不可能(在你的头脑中)是所报告的错误说,你去寻找一个问题在另一个领域... 只有发现几个小时后,原来的错误消息确实是正确的。

因为您正在使用 Eclipse,我认为 Thilo 是正确的,您收到这条消息最可能的原因是因为您的一个项目正在编译1.6类。如果系统上只有1.5 JRE,这并不重要,因为 Eclipse 有自己的编译器(而不是 javac) ,只需要1.5 JRE 就可以编译1.6个类。 这可能很奇怪,需要不检查设置才能允许这样做,但我刚刚设法做到了这一点。

对于有问题的项目,检查 ProjectProperties (通常是 Alt + Enter) ,JavaCompiler 部分。下面是一个配置为编译1.6但只有1.5 JRE 的项目的映像。

enter image description here

另一个可能发生这种情况的场景是,当您从主机 eclipse 启动一个 eclipse 实例(用于调试等)时——在这种情况下,仅仅改变项目的类路径上的项目级别或 JRE 库是没有帮助的。重要的是用于启动目标 Eclipse 环境的 JRE。

还要检查项目中为更高版本的 Java 编译的任何 jar 文件。如果这些是您自己的库,您可以通过将目标版本属性更改为 javac 来修复这个问题

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

也要注意显而易见的东西。有一次,当我意外地获取了服务器添加和删除操作的错误资源时,我得到了这个错误。很容易被忽视。

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

我也得到了同样的错误。我使用 Maven 编译项目的原因。我让 JAVA _ HOME 指向 JDK7,因此 JAVA 1.7被用于编译,在运行项目时,我使用 JDK1.5。中更改以下条目。Class 路径文件或者在 Eclipse 中的更改(如屏幕快照中所示)解决了这个问题。

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

或者在 eclipse 的运行配置中更改为 enter image description here

更改项目以使用 java 1.7: 要使其工作,请遵循以下步骤:

  • 更改编译器遵从级别
  • 将您的项目 JRE/JDK 更改为相同级别的内容(在我的例子中为1.7)
  • 在项目引用的所有项目中执行相同的更改
  • 更改您的运行/调试配置以使用 JRE/JDK (或相同级别)

不工作?

  • 删除项目 Bin 目录
  • 干净
  • 重建

还是不行吗?

在项目目录中: edit. sets/org.eclipse.jdt.core.prefs > 确保应用了目标级别

祝你好运!

我通过更改服务器所需的 jre 来解决这个问题(在我的例子中是 tomcat)。 在 eclipse 中的服务器选项卡上,双击服务器(为了打开服务器配置页面) ,单击执行期函式库,然后更改所需的 JRE