Не удалось загрузить атрибут манифеста основного класса - PullRequest
1 голос
/ 22 октября 2010

Я знаю, что это очень распространенный вопрос, но я попробовал поискать в Google и не получил никакого полезного результата.Я пытаюсь сделать банку из моего файла "Main.class" (сделанного в NetBeans, но я не пытаюсь сделать банку с ним)

Я выполнил эту команду:

D:\NetBeans\trovanum3\build\classes\trovanum3>jar cf trovanum.jar *.class

И в этой папке появился файл .jar.Я думал, что это сработало бы, но не запустилось.

Я попытался открыть файл jar с помощью открывателя архива, и внутри него находятся файл "Main.class" и папка "META-INF".содержащий файл с именем "MANIFEST.MF" Файл содержит это:

Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)

В чем может быть проблема?

Ответы [ 6 ]

3 голосов
/ 22 октября 2010

Вам необходимо указать свойство Main-Class в файле манифеста: Понимание манифеста .Обычно это означает, что вам нужно добавить файл манифеста самостоятельно, а не разрешать его автоматическое добавление.

Кстати, вы всегда можете запустить свой код без манифеста, подобного этому:

java -cp path/to/myJar.jar my.package.MyClass 

манифест требуется, если вы хотите запустить его так:

java -jar path/to/myJar.jar
2 голосов
/ 22 октября 2010

Создайте файл с именем ну, все, что угодно, но мы назовем его manifest.txt

Откройте файл manifest.txt и введите:

Main-Class: Main

, затем, чтобы создать свой jar, введите

jar cfm trovanum.jar manifest.txt *.class

И все должно работать нормально.

1 голос
/ 29 января 2013

Создать исполняемый файл jar (а не обычный файл jar).Вы получаете эту опцию в eclipse при экспорте файла JAR.Я столкнулся с той же проблемой, и она разрешилась после создания исполняемого файла jar.

Создать пакетный файл как: java -jar "abc.jar" ..

1 голос
/ 22 октября 2010

Вы можете использовать опцию -e jar , чтобы указать точку входа, то есть основной класс.Например:

D:\NetBeans\trovanum3\build\classes> jar cfe trovanum.jar trovanum3.Main trovanum3\*.class

Сохраняет манипуляцию с манифестом, если это все, что вам нужно там.Обратите внимание, что рабочий каталог на один от указанного в вашем вопросе.В противном случае класс Main создается на верхнем уровне в jar, а не в каталоге, который отражает пакет, в котором он должен находиться.jar -tvf должен затем показать что-то вроде этого:

  0 Thu Oct 21 22:34:30 BST 2010 META-INF/
 80 Thu Oct 21 22:34:30 BST 2010 META-INF/MANIFEST.MF
488 Thu Oct 21 22:18:24 BST 2010 trovanum3/Main.class

-e

Устанавливает точку входа как точку входа приложения для автономных приложений, связанных в исполняемый файл JAR.Использование этой опции создает или переопределяет значение атрибута Main-Class в файле манифеста.Эта опция может использоваться при создании файла jar или при обновлении файла jar.Этот параметр указывает точку входа приложения без редактирования или создания файла манифеста.

1 голос
/ 22 октября 2010

Извлеките главный файл.

Добавьте дополнительную строку, чтобы она гласила:

Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)
Main-Class: Main

Убедитесь, что в конце есть два символа новой строки.

Обновить файл JAR. Вы могли бы либо отредактировать Манифест в файле jar с помощью WinRAR, 7-zip и т. Д., Либо удалить исходный файл jar (после извлечения и редактирования), а затем запустить

jar -cmf MANIFEST.MF trovanum.jar *.class

Тогда он будет использовать ваш недавно измененный манифест в банке.

0 голосов
/ 22 октября 2010

Вам необходимо установить атрибут Main-Class в манифесте вашей банки. Подробнее см. Ссылку на учебник по Java ниже.

http://download.oracle.com/javase/tutorial/deployment/jar/appman.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...