Java .jar не работает в Unix - PullRequest
       0

Java .jar не работает в Unix

2 голосов
/ 01 марта 2012

Я создал исполняемый файл JAR в среде Windows.Я могу запустить этот jar без проблем в Windows.

Когда я пытаюсь запустить тот же jar в среде unix, я получаю следующие исключения:

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 ]

4 голосов
/ 01 марта 2012

Похоже, вы работаете на Java 7, а затем пытаетесь запустить на Java 5 или что-то в этом роде.Это не вопрос Windows против Unix - это вопрос версии Java в операционной системе.

В идеале, обновите систему Unix до последней версии Java - или, если вы не можете этого сделатьизмените способ построения, чтобы использовать флаг -target в javac для генерации соответствующего байт-кода.Вы должны выбрать правильную версию стандартных библиотек для среды, в которой вам тоже нужно работать.

4 голосов
/ 01 марта 2012

Вы пытаетесь запустить его под более ранней версией Java.

Вы можете скомпилировать таргетинг с правильной версией или запустить под новой версией.

2 голосов
/ 01 марта 2012

Вы пытаетесь запустить программу, скомпилированную на более новой версии Java, на более старой версии Java.

Убедитесь, что программа скомпилирована для соответствующей целевой версии, на которой вы будете работать.Вы можете установить параметры компиляции, чтобы использовать более новый компилятор для создания программ, которые будут работать на более старых версиях, но, очевидно, вы не можете использовать более новые функции.

Например: Java 7 запускает все предыдущие версии двоичных файлов.Java 5 не может запускать более новые версии двоичных файлов.

1 голос
/ 01 марта 2012

Скорее всего, вы пытаетесь выполнить файл JAR, скомпилированный с помощью компилятора с более новой версией, чем JVM, установленная в системе, где вы пытаетесь его выполнить. Проверьте версию JVM в системе Linux и убедитесь, что версия равна или новее версии компилятора ...

1 голос
/ 01 марта 2012

Похоже, что файл .class был скомпилирован с более новой версией Java, чем ваша установка Linux.обновите результаты:

java --version

как в Linux, так и в Windows, и проверьте, есть ли у вас java, а не openjdk, в linux (openjdk может ошибаться).
если версия в linux нижезатем на Windows, это проблема, обновите его.

1 голос
/ 01 марта 2012

Вероятно, у вас установлена ​​* nix более старая версия Java, а не Windows. Jar был создан с использованием более новой версии, что означает, что он не может работать на старой версии, поскольку он может иметь функции, которые еще не поддерживаются. Попробуйте обновить * nix Java и повторите попытку.

1 голос
/ 01 марта 2012

UnsupportedClassVersionError означает, что вы скомпилировали класс с версией Java, более новой, чем версия Java, на которой вы пытаетесь запустить программу.

Например, вы скомпилировали это с JDK 6 и пытаетесь запустить программу на Java 5 или более ранней версии JVM.

Это не работает. Более новые версии Java могут запускать программы, скомпилированные с более старыми версиями, но не наоборот.

1 голос
/ 01 марта 2012

Убедитесь, что на обеих платформах установлена ​​последняя версия Oracle Java.

0 голосов
/ 15 января 2019

(Опубликовано от имени автора вопроса) .

Спасибо за помощь, кажется, вы все правы.Я разработал JAR на Java 1.6, и наш сервер Unix находится на 1.5.

...