Чому не вдалося завантажити атрибут маніфесту основного класу з файлу 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.
пферат

35
  1. встановити шлях до класу та скомпілювати

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

  2. створити manifest.txt

    Основний клас: ваш рядок newApp

  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 знаходиться в пакеті "пакет").
Дайній

1
Тож, ймовірно, в Linux ця опція (-cp) не існує (моя - java v1.6.0_24, середовище виконання OpenJDK (IcedTea6 1.11.3) (6b24-1.11.3-1ubuntu0.12.04.1)).
kenorb

java -version => Java HotSpot (TM) 64-бітна серверна віртуальна машина (збірка 20.1-b02, змішаний режим) "java -cp. test1.Main" працює
Dainius

/ usr / lib / jvm / java-6-openjdk-amd64 / bin / java -version => 64-розрядна версія OpenJDK Server VM (збірка 20.0-b12, змішаний режим) "/ usr / lib / jvm / java-6-openjdk -amd64 / bin / java -cp. test1.Main "працює
Dainius

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 ви в основному просто вибираєте Файл / Експорт з меню та виконуєте вказівки.

Таким чином, ви можете бути впевнені, що ваш файл JAR правильний, і ви знатимете, що шукати в іншому місці, якщо проблема все ще існує. Процес повністю описаний у FAQ. Як створити виконуваний файл JAR для автономної програми SWT? .


Дякуємо за ExportEclipse IDE.
Ninh Pham,


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

Мій маніфест має точку входу, як вказано в документації oracle (переконайтеся, що в кінці файлу є новий рядок):
Main-Class: Test


0

Я зіткнувся з тією ж проблемою. Ця команда unix не може знайти основний клас. Це тому, що версії JDK часу виконання та компіляції відрізняються. Зробіть банку затьмаренням після зміни версії компілятора 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. Виберіть Runnable Jar файл у пункті призначення експорту 3. Введіть ім'я банки та виберіть «Пакет потрібен ...» (друга перемикач) -> Готово

Сподіваюся, це допомагає ...!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.