我正在尝试在Jetty(v9.0)Web服务器上启动非常简单的Java Web应用程序。
使用Maven构建并创建了WAR包,可以看到在清单文件中,我使用了OS X上编译Java 1.6u43。
META-INF/MANIFEST.MF的内容
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: irraju
Build-Jdk: 1.6.0_43
我在Ubuntu上运行Jetty,可以看到,我有一个略高的java版本1.6.0_45。如果Java是向后兼容的,我的Java应用程序应该可以在Jetty上运行,但实际上却提示“unsupported minor version”错误。
root# java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)
root# java -DDEBUG -jar start.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/eclipse/jetty/start/Main : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: org.eclipse.jetty.start.Main. Program will exit.
在互联网上,有些人在尝试在1.6* JVM上运行Java 1.7编译的应用程序时遇到了这个问题。但我无法弄清楚为什么我的情况下都是1.6*版本,而部署环境却略高于JVM版本,也会发生这种情况。
如果我将应用程序部署在使用java 1.6.0_45的Tomcat上,它就不会抱怨并且可以正常工作。我在这里错过了什么非常微小的东西吗?