不支持的类版本错误:不支持的主要.次要版本 51.0,无法加载类。

32

可能是重复问题:
异常 in thread "main" java.lang.UnsupportedClassVersionError: a (Unsupported major.minor version 51.0)

我使用JDK 1.7.0和Eclipse IDE(Indigo)开发了一款Java Web应用程序,并在Eclipse IDE中配置的Tomcat(apache-tomcat-7.0.23)上运行该应用程序。

当我尝试通过IDE运行我的应用程序时,它可以正常运行。但是当我创建了它的WAR文件并将其放置在apache部署文件夹(webapps)中,并从IDE之外运行它时,启动页面可以成功加载,但是当我尝试对它进行任何操作时就会出现错误。

UnsupportedClassVersionError unsupported major.minor version 51.0 unable to load class bean.myclassname

我已经检查了IDE外的Java版本,它是JDK 1.7.0,并且JAVA_HOME环境变量设置为C:\Program Files\Java\jdk1.7.0_01。


10
作为Java初学者,我认为这些问题并不重复。问题和解决方案存在细微差别,对于Java新手来说这些差别非常重要,更容易理解。很高兴这个问题被提出来了,另一个问题并不能帮助我解决我的问题,但这个问题确实做到了。 - Slobaum
4个回答

34

很明显,在外部运行时它并不使用相同版本的Java。仔细查看启动脚本,找到它选择要运行的Java版本的位置。您还应该检查启动日志,以查看其运行的版本是否被指定。

或者,除非您需要Java 7的功能,否则您可以在Eclipse中更改编译器首选项以针对1.6。


是的,最初它是1.6,但后来我将其更改为1.7,这需要重新构建应用程序,因此我再次进行了重建,但问题仍然存在。 - Nishit Jain
@NishitJain:如果你以前是针对1.6版本构建的话,那么肯定是其他一些jar文件导致了问题。日志中是否包含了有关它正在尝试加载的更多信息? - Jon Skeet
信息:正在部署Web应用程序存档C:\ Program Files \ Apache Software Foundation \ apache-tomcat-7.0.23 \ webapps \ DemoWebApp.war 2012年1月24日下午12:40:54 org.apache.catalina.util.SessionIdGenerator createSecureRandom它正在尝试仅加载单个war文件,这是我替换为版本1.7构建的Web应用程序war文件。 - Nishit Jain
@NishitJain:请在您的问题中发布完整的日志部分,包括带有错误消息本身的日志条目。您是否查看了日志以查看它对正在使用哪个Java版本的信息? - Jon Skeet
是的,约翰,你是正确的,它首先加载了JDK 1.6.29版本,然后才加载了在路径变量中指定的JDK 1.7.0版本。我刚刚从变量中删除了JDK 1.6.29,这也需要计算机重新启动,因为即使删除了JDK 1.6.29路径,Tomcat仍然会尝试首先加载相同的内容,所以在重新启动系统并再次初始化Tomcat后,它只从路径变量中加载JDK 1.7.0版本,然后运行我的应用程序,它可以正常运行......谢谢Jon。 - Nishit Jain
我还发现对于JDK 1.6,我必须使用微软的JDBC驱动程序4.0版。尽管微软网站的某些部分表示这些驱动程序与1.6兼容,但是4.1和4.2的驱动程序会引发错误。 - rwblackburn

16

即使您在eclipse中使用的JDK版本为1.7,您也需要确保eclipse的编译级别设置为1.7。您可以检查编译级别-->窗口-->首选项-->Java--编译器--编译级别。

当编译级别与运行时不匹配时,会发生“Unsupported major minor error”错误。


是的,最初它是1.6版本,但后来我将其更改为1.7版本,这需要重新构建应用程序,因此我再次进行了重建,但问题仍然存在。 - Nishit Jain
我解决了这个问题,Tomcat指向了jre6,我只需安装jre7并将JAVA_HOME和JRE_HOME指向它而不是JE6,然后再次运行Apache并部署我的Web应用程序,一切正常。 - Bassel Kh
1
你的回答对于Java初学者来说比被选中的回答更清晰、更具描述性。谢谢。 - Slobaum

2

java_home环境变量应该指向正确版本的Java安装目录,以便Tomcat使用正确的版本启动。例如,如果您使用Java 1.7构建项目,则确保JAVA_HOME环境变量指向您计算机上的JDK 1.7安装目录。

我遇到了同样的问题,当我在Tomcat中部署war文件并运行时,链接会抛出错误。但是将变量JAVA_HOME指向jdk 1.7解决了这个问题,因为我的war文件是在Java 1.7环境下构建的。


抱歉,对我来说没有起作用。 - Roberto Rodriguez

0
尝试将以下内容添加到您的eclipse.ini文件中:
-vm
C:\Program Files\Java\jdk1.7.0_01\bin\java.exe

你可能还需要在同一文件中将Dosgi.requiredJavaVersion更改为1.7。


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