2015-07-12 3 views
4

Я знаю, что файлы jar должны иметь атрибут manifest.mf Main-Class:, чтобы иметь точку входа и сделать файл jar runnable. Теперь у меня есть файл jar, который я построил ниже. Все классы являются частью пакета burrito. Мой файл MANIFEST.MF выглядит следующим образом:Java jar - нет основного атрибута манифеста

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.9.1 
Created-By: 1.7.0_51-b13 (Oracle Corporation) 
Class-Path: 
X-COMMENT: Main-Class will be added automatically by build 
Main-Class: burrito.Main 

, и когда я пытаюсь построить и выполнить с помощью следующих действий:

jar -cvf Burrito.jar Customer.class Main.class Server 
.class Store.class MANIFEST.MF 
*added manifest 
adding: Customer.class(in = 2800) (out= 1424)(deflated 49%) 
adding: Main.class(in = 1147) (out= 757)(deflated 34%) 
adding: Server.class(in = 3954) (out= 2094)(deflated 47%) 
adding: Store.class(in = 3950) (out= 2190)(deflated 44%) 
adding: MANIFEST.MF(in = 203) (out= 158)(deflated 22%)* 

я получаю:

Burrito.jar 

*java -jar Burrito.jar 
no main manifest attribute, in Burrito.jar* 

Я пробовал различные путей, а также пытается использовать -m-переключатель (cvfm). Я попытался следующие:

java -cp Burrito.jar burrito.Main 

, а также

java -cp Burrito.jar Main 

, что и сказать мне Ошибка: Не удалось найти или загрузить основной класс

Я вчитывался форумы, и я не могу показаться «Google» моим способом решения здесь. Конечно, барабан Netbeans работает, но мне нужно построить свою собственную. Я заглянул в банку Netbeans, и я вижу, что у меня есть две папки, буррито и META-INF. Конечно, файл манифеста находится в папке META-INF, а папка burrito содержит файлы классов. Я не уверен, чтобы точно имитировать это, и я был бы рад просто запустить эту программу.

Любые указатели/подсказки?

ответ

4

Вы хотите что-то вроде этого:

jar -cvfm Burrito.jar MANIFEST.MF burrito/Customer.class burrito/Main.class burrito/Server.class burrito/Store.class 

Первый аргумент после опции соответствуют f флага (файл создать), а второй аргумент соответствует m флага (файл манифеста), и все остальные аргументы - это файлы для добавления в JAR. Вы должны обеспечить, чтобы структура папок в JAR соответствовала пакету Java, поэтому, если burrito.Main является классом, то вам нужно burrito/Main.class в JAR и аналогично для других классов.

+1

Действительно, jar -cvfm Burrito.jar MANIFEST.MF burrito/*. Class приводит к правильно исполняемому банку. – patricio2626

Смежные вопросы