2016-03-28 3 views
1

Я просмотрел Google и StackOverflow для разрешения и не нашел их до сих пор. Я пытаюсь создать простой исполняемый пакет .jar, используя файл манифеста из командной строки Windows, используя Java 1.8. Соответствующие файлы:Использование jar.exe с файлом манифеста для исполняемого файла - «нет основного атрибута манифеста»

Turtlephilia.java:

public class Turtlephilia { 
    public static void main(String[] args) { 
     System.out.println("i lurrrve turtles"); 
    } 
} 

manifest.mf:

Main-Class: Turtlephilia 

do.bat:

javac Turtlephilia.java 

jar cvmf manifest.mf Turtlephilia.jar Turtlephilia.class 

java -jar Turtlephilia.jar 

Когда я исполняю do.bat компилирует и архивы успешно, но после запуска файла jar он генерирует эту ошибку:

no main manifest attribute, in Turtlephilia.jar 

Примечание: Я на самом деле в состоянии успешно запустить его с помощью этой команды:

java -cp Turtlephilia.jar Turtlephilia 

Но мне нужно, чтобы быть исполняемым банку.

Что я делаю неправильно? Как трудно это может быть!?

+0

Вам удалось создать манифест манифест с помощью Блокнота? Я подозреваю, что в начале есть невидимый символ [byte-order mark] (https://en.wikipedia.org/wiki/Byte_order_mark) (BOM), что означает, что линия не технически начинается с 'Main-Class'. Решение. Добавьте пустую строку над 'Main-Class'. – VGR

+0

Я редактировал в блокноте, но после добавления пустой строки я получаю ту же проблему. Кстати, я заметил, что если я перетащил .jar в Netbeans и посмотрю, то в пакете под META-INF \ MANIFEST.ms он имеет манифест по умолчанию с Manifest-Version: 1.0, Created-By: ... ., без моей основной линии. Является ли это просто игнорированием моего файла манифеста вообще? –

+0

О, человек. Вы были на правильном пути. Основной класс был последней строкой в ​​файле манифеста, и после него потребовался возврат каретки. –

ответ

1

Ну, я нашел причину.

Я создал файл manifest.mf в Блокноте и имел единственную строку для Main-Class.

Оказывается, что после этой строки требуется возврат каретки, чтобы распознать его, т.е. пустая строка в конце.

Будучи стуча головой о стену в течение нескольких часов, я не увлечен средой разработки Java.

+0

Блокнот не является редактором исходного кода. Использование Notepad и обвинение Java - это просмотр веб-страниц с помощью wget и обвинение StackOverflow в том, что они трудно использовать. – dimo414

+0

Я не согласен. Быть неспособным справиться с присутствием/отсутствием конечного пространства довольно плохо, и не может генерировать какое-либо полезное предупреждение при сбое соединений в злом. В любом случае, обычно ли IDE добавляет конечные пробелы в текстовые файлы? Я предполагаю, что нет, так почему же они будут другими? –

+0

Как правило, я согласен с вами; программы должны потерпеть неудачу изящно. Но есть пределы этой грациозности - вы не можете ожидать, что программы всегда будут вести себя разумно перед лицом [мусорного ввода] (https://en.wikiquote.org/wiki/Charles_Babbage#Passages_from_the_Life_of_a_Philosopher_.281864.29). И ваше предположение, хотя и разумно, неверно. Текстовые файлы [должны заканчиваться в новой строке] (http://unix.stackexchange.com/q/18743/19157) ([background] (http://stackoverflow.com/q/729692/113632)), и Notepad, неспособный добавить новую строку в конце файла, имеет низкое поведение со своей стороны. – dimo414