错误的java版本?不支持的major.minor版本51.0

时间:2015-07-16 14:35:45

标签: java maven jar backwards-compatibility

我在外部服务器上运行一个jar文件。 jar文件由mvn在我的本地机器上编译。外部服务器安装了java 1.7,所以我需要明确告诉maven编译到java 1.7,因为在我的本地机器上我已经使用了java 1.8。

但是,运行jar时仍然会出现以下错误:

Exception in thread "main" java.lang.UnsupportedClassVersionError: io/package/name/Launcher : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:643)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
Could not find the main class: io.package.name.Launcher. Program will exit.

根据其他线程Unsupported major.minor version 51.0表示期望java 7( update :这是错误的。实际上错误意味着我尝试执行jar的系统无法处理提供的版本是51,等于java 7 / 1.7。这意味着系统运行的版本更低(java 1.6?))。但是,我仔细检查了编译的类,它们确实应该与java 7兼容。但是在检查时我可能做错了。我按照此处的说明使用HexEditor进行了检查:how to check the jdk version used to compile a .class file

这是一个显示Launcher.class的第7个和第8个字节的屏幕截图。 0x33为51. 51表示类文件与Java 7兼容(根据https://stackoverflow.com/a/1096159/973158)。

服务器上的java -version产生:

java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.1.el6_6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

这就是我告诉maven在pom.xml中编译为java 1.7的方法

<properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
</properties>

我做错了什么?是不是服务器上有某种缓存,它仍然保存了编译为java 1.8的旧版本的类?

最终更新:

我的代码实际上是java 1.7兼容,但是,我不知道需要java 1.6的事实。我的坏。

0 个答案:

没有答案