Java .jar没有在unix中运行

时间:2012-03-01 18:33:05

标签: java unix executable-jar

我在Windows环境中创建了一个可执行jar文件。我可以在Windows中运行这个jar而没有任何问题。

当我尝试在unix环境中运行相同的jar时,我会遇到以下例外情况:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:242)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)

我做错了什么?

9 个答案:

答案 0 :(得分:4)

您正尝试在早期版本的Java下运行它。

您可以针对正确的版本进行编译,也可以在较新的版本下运行。

答案 1 :(得分:4)

看起来你正在构建Java 7,然后尝试在Java 5上运行,或类似的东西。这不是Windows vs Unix的问题 - 这是操作系统中Java版本的问题。

理想情况下,将您的Unix系统升级到最新版本的Java - 或者如果您不能这样做,请更改您构建的方式,以使用-target中的javac标志生成适当的字节码。您应该针对您需要运行的环境定位正确版本的标准库。

答案 2 :(得分:2)

您正尝试在较旧版本的Java上运行在较新版本的Java上编译的程序。

确保为您将运行的相应目标版本编译程序。您可以设置编译选项以使用较新的编译器来创建将在旧版本上运行的程序,但显然您无法使用更新的功能。

例如:Java 7运行所有以前版本的二进制文件。 Java 5无法运行更新版本的二进制文件。

答案 3 :(得分:1)

确保在两个平台上都安装了最新版本的Oracle Java。

答案 4 :(得分:1)

UnsupportedClassVersionError表示您使用比您尝试运行该程序的Java版本更新的Java版本编译该类。

例如,您已使用JDK 6编译它,并且您正尝试在Java 5或更早版本的JVM上运行该程序。

这不起作用。较新版本的Java能够运行使用旧版本编译的程序,但不是相反。

答案 5 :(得分:1)

您的* nix安装上可能有旧版Java,而不是Windows安装版。 jar是使用较新版本构建的,这意味着它无法在旧版本上运行,因为它可能具有尚不支持的功能。尝试更新你的* nix Java并尝试再次运行它。

答案 6 :(得分:1)

看起来.class文件是使用较新版本的java编译然后是你的linux安装。请更新以下结果:

java --version
在linux和windows上都是

,并在linux上检查你是否有java,而不是openjdk(openjdk可能有bug)。
如果Linux上的版本低于Windows,那就是问题,请更新它。

答案 7 :(得分:1)

您很可能正在尝试执行使用编译器编译的jar文件,该编译器的版本比您尝试执行它的系统上安装的JVM更新。检查Linux系统上的JVM版本,确保版本等于或高于编译器版本......

答案 8 :(得分:0)

(代表问题作者发布)

感谢您的帮助,看来大家都是正确的。我在Java 1.6上开发了jar,而我们的unix服务器在1.5上。