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

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

jre -cp app.jar MainClass

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

java -jar main.jar

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

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

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

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


person Roman    schedule 07.04.2010    source источник


Ответы (11)


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

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

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

java -jar app.jar

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

Main-Class: MainClass

Тогда беги

jar cfm app.jar manifest.txt *.class
person Jon Skeet    schedule 07.04.2010
comment
Спасибо. Оно работает. Я создал файл манифеста с Main-Class: MainClass, а затем создал файл .jar с помощью указанной вами команды. После этого я смог запустить свою программу через java -jar main.jar. - person Roman; 07.04.2010
comment
Другой вариант - использовать параметр -e, не требуя отдельного файла. jar cfe app.jar MainClass *.class Примечание: -e был добавлен в JDK 6. - person pferate; 07.11.2013

  1. # P1 #
    # P2 #
  2. # P3 #
    # P4 #
  3. # P5 #
    # P6 #
  4. # P7 #
    # P8 #
person weirdFactory    schedule 05.07.2011

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

java -cp .;app.jar package.MainClass

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

person Dainius    schedule 23.07.2010
comment
Есть: Неизвестный вариант: -cp. Не могли бы вы просмотреть свой ответ? Потому что я не понимаю, что пытается сделать эта команда. (java -cp.; пакет app.jar.MainClass). Это одна команда или две? - person kenorb; 30.08.2012
comment
docs.oracle.com/javase/1.5.0/ docs / tooldocs / windows / -cp.; app.jar должен добавить ваш файл app.jar в путь к классу, чем вы можете запустить метод MainClass.main () (MainClass находится в пакете пакета). - person Dainius; 30.08.2012
comment
Так что, вероятно, в Linux этот параметр (-cp) не существует (у меня java v1.6.0_24, среда выполнения OpenJDK (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)). - person kenorb; 05.09.2012
comment
java -version = ›64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 20.1-b02, смешанный режим) java -cp. test1.Main работает - person Dainius; 06.09.2012
comment
/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version = ›64-разрядная серверная виртуальная машина OpenJDK (сборка 20.0-b12, смешанный режим) / usr / lib / jvm / java-6-openjdk- amd64 / bin / java -cp. test1.Main работает - person Dainius; 06.09.2012
comment
java -h = ›-cp‹ путь поиска классов в каталогах и файлах zip / jar › - person Dainius; 06.09.2012
comment
ох, между -cp и точкой нужен пробел - person Dainius; 06.09.2012

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

ВЕРНЫЙ

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

НЕПРАВИЛЬНЫЙ

java -jar maui-1.0.jar maui.main.Examples tagging 
person Sridhar Sarnobat    schedule 12.06.2012
comment
Это может быть только проблема с BSD, я почти уверен, что недавно сделал это по-другому. - person Sridhar Sarnobat; 28.01.2018

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

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

person Greg Burdett    schedule 23.11.2011
comment
Спасибо за Export в Eclipse IDE. - person Ninh Pham; 20.06.2014

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

Что разрешило это:
jar cvfm test.jar Manifest.txt Test.class

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

person ObviousChild    schedule 22.09.2014
comment
Мне смешно, что в конце файла требуется символ новой строки. Спасибо, что избавили меня от неприятностей! - person Nikola Petrovic; 10.04.2021

Пытаться

java -cp .:mail-1.4.1.jar JavaxMailHTML 

нет необходимости иметь manifest файл.

person user4581964    schedule 19.02.2015

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

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

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

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

person john p    schedule 11.06.2014

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

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

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

person Harshita Sethi    schedule 24.04.2015

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

person AmirHossein Rezaei    schedule 17.08.2015

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

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

person Barani r    schedule 03.11.2015