Мой файл .exe из launch4j не работает, как мой файл Java.Я что-то пропустил? - PullRequest
0 голосов
/ 17 февраля 2019

Будучи новичком в Java и связывая программы с кодом, я смог успешно получить правильный вывод, запустив простой новый файл Java HelloWorld.Поэтому я считаю, что с java-файлом нет проблем с точки зрения компиляции его в файл класса или последующего его запуска, и что у меня есть все файлы, необходимые в java-комплекте для создания исполняемого файла.Однако я не уверен, правильно ли я использую launch4j, чтобы получить .exe, либо с настройкой .jar, либо с помощью процесса создания правильного файла .xml.

Приведенный ниже код показывает, что я получаю, когда пытаюсь поместить все в файл .jar, но я полагаю, что вывод является ошибкой, поскольку новый файл .jar не создается, пока я не выну "m"из" cvfm "в команде jar.Код действительно показывает что-то о добавляемом манифесте, независимо от того, когда это делается, но я все еще не получаю правильное приложение.Получив правильный вывод без launch4j, я прекратил воссоздание файлов .java и .class и просто сосредоточился на .xml, когда воссоздание файла .jar не достигло никакой разницы.Я попытался в launch4j оставить переменные среды пустыми на вкладке JRE или просто включил тот же путь системных переменных, с которым правильно работал java-файл в командной строке, и я также переключил проверку GUI на консоль в заголовкевкладка.Исследования также сказали мне искать файл manifest.mf, к которому я не думаю, что у меня есть этот точный файл в JDK, но, возможно, нашел что-то похожее в наборе (по крайней мере, при просмотре в типичных областях, таких как мусорное ведропапка).

C:\JavaTest>jar cvfm HelloWorld.jar HelloWorld.class
java.io.IOException: invalid header field
        at java.util.jar.Attributes.read(Attributes.java:406)
        at java.util.jar.Manifest.read(Manifest.java:234)
        at java.util.jar.Manifest.<init>(Manifest.java:81)
        at java.util.jar.Manifest.<init>(Manifest.java:73)
        at sun.tools.jar.Main.run(Main.java:176)
        at sun.tools.jar.Main.main(Main.java:1288)

C:\JavaTest>jar cvf HelloWorld.jar HelloWorld.class
added manifest
adding: HelloWorld.class(in = 426) (out= 289)(deflated 32%)

Я всегда получаю предупреждение о подписи при тестировании оболочки, но я не думаю, что это была проблема, как настоящая ошибка.Из-за природы многочисленных комбинаций трудно отследить, что послужило причиной различий в проблемах, но, похоже, что теперь, оставляя вкладку JRE пустой, за исключением наличия минимальной версии JRE, выдается ошибка «нет атрибута основного манифеста».из теста обертки в launch4j.Включение самого конца пути системной переменной в поле переменной среды делает то же самое.Прежде чем пытаться воссоздать .jar, переключение заголовка на консоль создаст .exe без ошибок, но либо открытие приложения либо ничего не сделает, либо выдает тот же вывод «без атрибута главного манифеста» в командной строке.Теперь я даже не могу использовать launch4j для тестирования оболочек, которые имеют заголовок на консоли, даже когда их сборка не приводит к ошибкам (но такая же ошибка происходит при открытии .exe).Я просто пытаюсь получить .exe, созданный из launch4j, чтобы обеспечить тот же вывод в командной строке, который я получаю при вводе "java HelloWorld" там.

Если я действительно правильно создаю .jar и правильно работаю с launch4j, пропустил ли я только что внесенный в список шаг, когда мне нужен какой-то файл манифеста для работы с launch4j?Если так, как я должен удостовериться, что я получил это правильно?Будет ли это видно в папке bin или полностью отдельно от JDK?Нужно ли мне переместить его в папку JavaTest, где находятся файлы java / class / jar / exe?Любая помощь действительно ценится.

1 Ответ

0 голосов
/ 17 февраля 2019

'm' в jar cvfm обозначает манифест и подразумевает, что вы будете предоставлять файл в качестве аргумента, который является манифестом.F означает: вы зададите имя файла.

Итак, HelloWorld.jar - это аргумент для f, а HelloWorld.class - это аргумент для m.Ваш файл класса, очевидно, не является допустимым файлом манифеста, поэтому и возникает ошибка.

Обычно для создания jar-файлов, таких как maven или gradle, используйте инструмент сборки.Вам нужен манифест, чтобы иметь атрибут Main-Class, и вам нужен атрибут Main-Class, чтобы создать исполняемый jar, и вам нужен runnable jar для launch4j-ify it.

Создайте файл с именемMANIFEST.MF.Создайте его с помощью простого текстового редактора.Он должен содержать:

Main-Class: com.foo.thisIsAPackage.YourMainClass

и ничего больше.

Тогда:

jar cvfm HelloWorld.jar MANIFEST.MF YourMainClass.class

обратите внимание, что я уверен, что вы ДОЛЖНЫ иметь пакет, или это не таксобираюсь на работу.

...