Почему не удалось загрузить атрибут манифеста основного класса из файла JAR?


85

Таким образом я создал файл JAR jar cf jar-file input-files. Теперь я пытаюсь запустить его. Запустить не получается (команда jre не найдена):

jre -cp app.jar MainClass

Это тоже не работает:

java -jar main.jar

(Не удалось загрузить атрибут манифеста основного класса из main.jar).

Я также узнал, что

Для запуска приложения, упакованного как файл JAR (версия 1.2 - требуется заголовок манифеста Main-Class)

Что такое «Заголовок манифеста основного класса»? Как мне его создать и куда поставить?

Ответы:


62

Я не уверен, что верю вашим симптомам:

  • Если jreкоманда не найдена, запуск jre -cp app.jarдолжен выдать ту же ошибку.
  • Простое добавление файла JAR в путь к классам не должно приводить к ошибке, которую вы видите.

Я ожидаю, что вы увидите эту ошибку, если запустите:

java -jar app.jar

Заголовок Main-Class должен быть в манифесте для файла JAR - это метаданные о таких вещах, как другие необходимые библиотеки. См. Документацию Sun, чтобы узнать, как создать соответствующий манифест. В основном вам нужно создать текстовый файл, который включает в себя такую ​​строку:

Main-Class: MainClass

Тогда беги

jar cfm app.jar manifest.txt *.class

Спасибо. Оно работает. Я создал файл манифеста, Main-Class: MainClassа затем создал файл .jar с помощью указанной вами команды. После этого я смог запустить свою программу java -jar main.jar.
Роман

1
Другой вариант - использовать параметр -e, не требуя отдельного файла. jar cfe app.jar MainClass *.classПримечание: -e был добавлен в JDK 6.
pferate

35
  1. установить путь к классам и скомпилировать

    javac -classpath "C: \ Program Files \ Java \ jdk1.6.0_ updateVersion \ tools.jar" yourApp.java

  2. создать manifest.txt

    Main-Class: YourApp новой строки

  3. создайте yourApp.jar

    jar cvf0m yourApp.jar manifest.txt yourApp.class

  4. запустите yourApp.jar

    java -jar yourApp.jar


9

Вы можете работать с:

java -cp .;app.jar package.MainClass

У меня работает, если в файле JAR нет манифеста.


Есть: Неизвестный вариант: -cp. Не могли бы вы просмотреть свой ответ? Потому что я не понимаю, что эта команда пытается сделать. (java -cp.; app.jar пакет.MainClass). Это одна команда или две?
kenorb

1
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/… " -cp .; app.jar" должен добавить ваш файл app.jar в путь к классу, чем вы можете запустить метод MainClass.main () ( MainClass находится в пакете "package").
Дайний

1
Так что, вероятно, в Linux этот параметр (-cp) не существует (у меня java v1.6.0_24, среда выполнения OpenJDK (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)).
kenorb 05

"Java -cp test1.Main" Java -version => Java HotSpot (TM) 64-разрядного сервера ВМ (сборка 20.1-B02, смешанный режим) работы
Дайниус

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => 64-разрядная серверная виртуальная машина OpenJDK (сборка 20.0-b12, смешанный режим) "/ usr / lib / jvm / java-6-openjdk . -amd64 / бен / Java -cp test1.Main»работает
Дайниус

6

Я получил эту ошибку, потому что у меня были аргументы в неправильном порядке:

ВЕРНЫЙ

java maui.main.Examples tagging -jar maui-1.0.jar 

НЕПРАВИЛЬНО

java -jar maui-1.0.jar maui.main.Examples tagging 

1
Это может быть только проблема с BSD, я уверен, что недавно сделал это по-другому.
Шридхар Сарнобат

1

Самый простой способ убедиться, что вы правильно создали исполняемый JAR-файл с соответствующим файлом манифеста, - это использовать Eclipse для его создания. В своем проекте Eclipse вы просто выбираете в меню File / Export и следуете подсказкам.

Таким образом, вы можете быть уверены, что ваш JAR-файл правильный, и будете знать, что нужно искать в другом месте, если проблема все еще существует. Этот процесс полностью описан в FAQ. Как создать исполняемый файл JAR для автономной программы SWT? .


Спасибо за использование ExportEclipse IDE.
Нинь Пхам


0

Я обнаружил, что у меня также была эта ошибка в NetBeans. Надеюсь, следующее будет полезно.

  1. Убедитесь, что при переходе в конфигурацию проекта вы установили основной класс, который собираетесь запустить.
  2. Сделайте сборку или чистую сборку
  3. Поместите файл jar в нужное место и попробуйте снова: java -jar "YourProject.jar" в командной строке.

Это была проблема, с которой я столкнулся, потому что у меня были другие «тестовые» программы, которые я использовал в NetBeans, и я должен был убедиться, что основной класс в части «Выполнить» конфигурации проекта был установлен правильно.

много благословений, Джон П.


0

Я получал ту же ошибку при запуске :
jar cvfm test.jar Test.class Manifest.txt

Решением было следующее:
jar cvfm test.jar Manifest.txt Test.class

В моем манифесте есть точка входа, указанная в документации оракула (убедитесь, что в конце файла есть символ новой строки):
Main-Class: Test


0

Я столкнулся с той же проблемой. Эта команда unix не может найти основной класс. Это связано с тем, что версии JDK во время выполнения и компиляции различаются. Сделайте банку через eclipse после изменения версии компилятора java. Мне помогла следующая ссылка.

http://crunchify.com/exception-in-thread-main-java-lang-unsupportedclassversionerror-comcrunchifymain-unsupported-major-minor-version-51-0/

Попробуйте запустить банку, созданную после этого шага, а затем выполнить ее


0

Если ваш путь к классу полностью указан в манифесте, возможно, вам нужна последняя версия среды выполнения java. Моя проблема исправлена, когда я переустановил jre 8.


0

Если вы используете eclipse, попробуйте следующее: 1. Щелкните проект правой кнопкой мыши -> выберите «Экспорт» 2. Выберите «Запускаемый файл Jar» в поле выбора места для экспорта 3. Введите имя банка и выберите «Требуется пакет ...» (второй переключатель) -> Готово

Надеюсь это поможет...!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.