2012-04-12 2 views
16

Я пытаюсь создать файл .jar с помощью терминала mac, но у меня есть проблема. Я выполнил шаги here, но не увенчался успехом. Я получил это сообщение об ошибке:Как создать файл .jar с помощью терминала

Failed to load Main-Class manifest attribute from 
aclient.jar 

Так как же вы собираетесь это делать? Моя java-программа называется Main.java, и я скомпилировал ее в файл .class. Теперь, что мне делать?

Благодаря

ответ

40

1) Убедитесь, что все необходимые файлы в каталоге, вы открыли терминала/Командная строка и перемещаться в этот каталог.

2) Компиляция класс .java, например Helloworld.java с

javac HelloWorld.java 

3) Это создаст файл .class, необходимый для файла JAR.

4) Далее создайте файл манифеста (сохраненный с помощью расширения .txt) с помощью текстового редактора и введите следующий

Main-Class: HelloWorld 

или любое имя вашего файла есть.

5) Затем создайте файл JAR, используя этот код:

jar cfm HelloWorld.jar Manifest.txt HelloWorld.class 

6) Запустите файл:

java -jar HelloWorld.jar 

Если что-то кажется неясным, обратитесь эти веб-сайты: creating a jar file и setting an applications entry point.

Надеюсь, это поможет другим, подбадривает Тома!

Edit:

После комментария Инги стоит отметить, что для того, чтобы включить несколько файлов в банке вы должны использовать:

javac *.java 

с последующим

jar cfm HelloWorld.jar Manifest.txt *.class 
+0

Спасибо ! Я получил некоторые неприятности, следуя вашим инструкциям, потому что у меня есть несколько java-файлов в моем проекте. Сначала мне показалось, что мне нужно всего лишь скомпилировать мой основной класс, но если у вас несколько java-файлов, вы должны их скомпилировать, а вместо «javac HelloWorld.java» вам придется делать «javac * .java» и «jar cfm HelloWorld.jar Manifest.txt HelloWorld.class "будет" jar cfm HelloWorld.jar Manifest.txt * .class ". Тем не менее вам нужно указать только основной класс в файле манифеста. Надеюсь, это поможет, если кто-то совершит ту же ошибку, что и я. – inga

+1

@inga Я обновил свой ответ, включив ваши комментарии. Спасибо за информацию! – Katana24

2

Вы должны иметь текстовый файл, который определяет основной класс. например

% cat MyMain 
Main-Class: HelloWorld 

затем

%jar cvfm foo.jar MyMain *.class 
%java -jar foo.jar 
Hello world 

См: http://java.sun.com/j2se/1.4.2/runtime.html#example

+0

Я последовал за вашу ссылку и создал простой пример. Для текстового файла это содержимое только Main-Class: HelloWorld. Или там должен быть какой-то другой текст. Также должен ли он быть сохранен как .txt-файл или с .mf или что-то еще? – Katana24

+1

Btw Я все еще получаю ошибку с ошибкой Main-Class манифеста даже после того, как вы посоветовали:/ – Katana24

+0

Попробуйте% jar xvf foo.jar создал: META-INF/ завышенный: META-INF/MANIFEST.MF надутый: HelloWorld.class, а затем взгляните на MANIFESTMF, он должен выглядеть как Manifest-Version: 1.0 Создано: 1.6.0_31 (Apple Inc.) Main-Class: HelloWorld –

3

Может быть, это поможет re Manifest.txt файл:

Предупреждение: текстовый файл должен заканчиваться символом ne w или возврат каретки. Последняя строка не будет обрабатываться должным образом, если она не заканчивается новой строкой или возвратом каретки.

4

Да, нам нужно использовать новую строку в конце имени класса ...Он работал для меня

т.е. Main-Class: HelloWorld

It will look like this in Notepad++ 
1.Main-Class: HelloWorld 
2. 
Смежные вопросы