SEVERE: Exception starting filter struts2
java.lang.UnsupportedClassVersionError:
Unsupported major.minor version 51.0 (unable to load class com.directv.actions.indexAction)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2922)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at com.opensymphony.xwork2.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:139)
at com.opensymphony.xwork2.ObjectFactory.getClassInstance(ObjectFactory.java:100)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyAction(XmlConfigurationProvider.java:366)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:329)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:429)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages(XmlConfigurationProvider.java:239)
at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:152)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:52)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:395)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:452)
at org.apache.struts2.dispatcher.FilterDispatcher.init(FilterDispatcher.java:201)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:983)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1660)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
当我尝试在 Linux 服务器上使用 Tomcat7 启动应用程序时,出现上述错误,但在使用 Tomcat7、JDK 7 的 Windows 7 上,它工作正常。
java version "1.6.0_22"
OpenJDK Runtime Environment (IcedTea6 1.10.8) (fedora-65.1.10.8.fc15-i386)
OpenJDK Client VM (build 20.0-b11, mixed mode)
只需更改已安装的 JRE,我就可以轻松地在本地计算机上复制此错误,因此我尝试使用 1.6 编译类,但仍然遇到相同的错误。我该如何解决这个问题?
最佳答案
虽然您可以运行使用低于或等于您正在使用的版本的Java版本编译的任何.class文件,但反之则不可能。
例如,您可以使用 JDK 6 进行编译并运行到 JRE 6 和 JRE 7,但不能使用 JDK 7 进行编译并运行到 JRE 6。
此错误:
Unsupported major.minor version 51.0
意味着您正在尝试运行 Java .class 文件,其 Java 版本低于用于编译该文件的 Java 版本。
major version number of the class file format being used.
J2SE 8 = 52 J2SE 7 = 51 <--------- J2SE 6.0 = 50 J2SE 5.0 = 49 JDK 1.4 = 48 JDK 1.3 = 47 JDK 1.2 = 46 JDK 1.1 = 45
在您的具体情况下,这意味着您正在使用 JDK 7 进行编译,并尝试使用较低的 Java 版本运行它。
那该怎么办?
如果您使用的是 Java 7 代码(Java 6 中不可用的结构),您别无选择,只能在 JRE 7 中运行代码(或在 Java 6 中重写代码) ...)。
如果您的代码符合 Java 6,您可以通过以下方式之一将其编译为与 Java 6 兼容:
使用JDK 6编译(可以与JDK 7一起安装);
使用JDK 7编译,但指定目标版本为Java 6:
使用 JAVAC:
javac -target 1.6
使用 ANT:
<javac srcdir="${src}" destdir="${build}" compiler="javac1.7" source="1.6" target="1.6" fork="true" debug="true" />
使用 Eclipse 进行编译(将使用其内部编译器,而不是安装的 JDK),并在编译器设置中指定您的目标是 Java 1.6:
使用 Maven 和 the following hacks 之一.
关于java - 为什么我在使用某些 JRE 时会收到 UnsupportedClassVersionError : Unsupported major. 次要版本 51.0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26517276/