Jetty运行在1.6 JVM上,无法运行在Java 1.6编译的Web应用程序。

5

我正在尝试在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上,它就不会抱怨并且可以正常工作。我在这里错过了什么非常微小的东西吗?
1个回答

10

根据Jetty版本列表,Jetty 9需要使用Java 7运行。

您可以尝试使用Java 6自行编译Jetty 9,但这很可能不会成功(否则,Jetty开发人员也可能已经这样做了)。


正确,Jetty 9定位于即将发布的servlet 3.1规范,该规范需要Java 1.7。 - jesse mcconnell

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