Launch4J - как подключить зависимые банки к сгенерированным exe
У меня есть простой Java-проект, который требует внешних банок.
Я создаю это с помощью netbeans, а после команды Clean и Build я могу найти в каталоге dist следующую структуру:
-myApp.jar
-lib/
library1.jar
library2.jar
типичный, я бы сказал.
Теперь я хотел бы распространять myApp.jar с зависимыми библиотеками как один exe.
Это возможно? Я пытаюсь использовать Launch4J. В графическом интерфейсе я создаю файл конфигурации, есть некоторые опции в разделе cp
<cp>lib/swing-layout-1.0.4.jar</cp>
но это похоже на classpath, и это единственное место, где я могу ссылаться на мои дополнительные банки.
После создания exe файла я не могу найти зависимости libs в exe (exe можно открыть с помощью winrar), и, таким образом, мое приложение аварийно завершает работу.
Как я могу сделать exe файл правильно?
Спасибо за вашу помощь.
Ответы
Ответ 1
Как это часто бывает, когда вы не можете решить проблему, я опубликовал ее на StackOverflow... и довольно скоро после публикации вопроса у меня появилась идея.
Итак, ответ на мой вопрос:
Поместите все зависимые банки в одну основную банку.
Мне потребовалось некоторое время, чтобы узнать, как я могу это сделать.
Чтобы помочь людям, я решил опубликовать здесь подробные инструкции - они основаны на Netbeans 7.4.
-
Следуя статье http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/, я создал ant script, которые строят одно-jar-приложение для меня.
Я мог бы вручную создать exe через Launch4J
-
Затем я решил, что мне нужна более автоматическая задача, и я сделал это, ant строит exe для меня (через Launch4J)
-
Затем я понял, что должен выполнить "чистку и сборку" перед моей автоматической задачей (в пункте 2)/Я решил, что хочу, чтобы чистые и строгие выполнялись автоматически до сборки exe
Собирая все вместе, я прикрепляю свою конструкцию ant build script, состоящую из точек 1,2,3:
Требуется отредактировать файл build.xml и поместить содержимое, указанное ниже, перед тегом конца проекта
<target name="package-for-launch4j" depends="clean,compile,jar">
<property name="launch4jexe.dir" location="C:\Program Files (x86)\Launch4j" />
<taskdef name="launch4j"
classname="net.sf.launch4j.ant.Launch4jTask"
classpath="${launch4jexe.dir}/launch4j.jar
:${launch4jexe.dir}/lib/xstream.jar" />
<property name="launch4j.jar.name" value="MyAppJarName"/>
<property name="launch4j.dir" value="exe"/>
<property name="launch4j.jar" value="${launch4j.dir}/${launch4j.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${launch4j.jar}"/>
<delete dir="${launch4j.dir}"/>
<mkdir dir="${launch4j.dir}"/>
<jar destfile="${launch4j.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<zip destfile="${launch4j.jar}">
<zipfileset src="${launch4j.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${launch4j.dir}/temp_final.jar"/>
<launch4j configFile="misc/l4j-myapp.xml" />
</target>
затем в Netbeans rightclick на файле build.xml и выберите:
Запуск цели/Другие цели/пакет для запуска4j
exe файл готов в папке exe: -)
Ответ 2
Я потратил часы на эту проблему. Итак, вот мой вклад.
Проблема здесь: как успешно поставить ваши внешние банки, что ваша программа .JAR нуждается в том, что вы создаете .exe.
Предположим, что вы уже и правильно настроили внешние банки на eclipse/netbeans и ALL WORK FINE командой: java -jar yourprogram.jar.
Таким образом, реальная проблема заключается в том, как обеспечить, чтобы этот .EXE файл содержал внешние банки, иначе он не будет работать должным образом.
1) Прежде всего, вам нужно забыть Launch4J и любую другую программу.
2) Установите JSmooth, я рекомендую вам использовать версию Windows.
3) В левом меню есть кнопка "Приложение". Нажмите на нее.
4) Появится вкладка "Classpath". Нажмите на плюс (+) и добавьте внешние файлы .jar. И это все!
Не забудьте поставить метку приложения .jar в поле "Использовать встроенную банку" и правильно выбрать основной класс. Он будет работать.
Ответ 3
Включение разных ссылок, которые помогли мне
Как включить все зависимые Jars в один неисполняемый банку?
Как создать исполняемый JAR с зависимостями с помощью Maven?
http://www.mkyong.com/java/how-to-make-an-executable-jar-file/
и, самое главное,
http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
быстрый тут
http://www.mkyong.com/java/how-to-add-your-manifest-into-a-jar-file/
Ответ 4
Я также столкнулся с той же проблемой при переносе моего.jar в exe. У меня также было много зависимых библиотек. Итак, это были шаги, которые я выполнил:
-
Загрузите и установите launch4j.
-
Откройте проект в netbeans. Очистите и создайте проект.
- Убедитесь, что в каталоге проекта есть папка с именем "dist". Он будет иметь ваши файлы jar с папкой lib (содержащей зависимые библиотеки).
- Открытый запуск 4j.
- Создайте выходной файл в папке dist. Например: OutputFile: D: ******\My_App\dist\my_application.exe
- Просмотрите файл jar в следующей строке. Например: Jar: D: ******\My_App\dist\my_application.jar
- Перейдите на вкладку классов. Отметьте CustomClasspath. Нажмите значок просмотра и перейдите к файлу jar, который находится в папке dist.
- Укажите версию Min Jre на вкладке JRE.
- Сохраните конфигурацию.
- Создайте оболочку (щелкнув значок настроек)
- Ваш exe файл будет создан в папке dist. Это оно :)
Ответ 5
Чтобы включить внешние библиотеки с Launch4j, вы должны иметь файлы ".jar" внешних библиотек рядом с вашим.exe (мои только в одной папке), а затем в "Classpath" вы помещаете путь к файлам.jar в " Изменить элемент:
Ответ 6
В launch4j перейдите на вкладку classpath. Отметьте поле пользовательского пути к классам. В поле редактирования введите полный путь к каждой банке, которую хотите включить, и нажмите "Принять". Когда закончите, просто введите имя основного класса в отдельное поле (например, MyProg). Все банки теперь будут включены в exe.
PS У меня все банки в одном каталоге. Я использую версию 3.12
Ответ 7
Когда вы конвертируете свой файл .jar
- Перейти на вкладку classpath
- Проверьте пользовательский путь к классу
- В основном классе выберите свой .jar из папки dist после сборки проекта.
- В текстовой области classpath добавьте свои библиотеки, вы добавляете их прямо под этой текстовой областью, записывая полный путь к библиотеке (конечно, включая библиотеку, то есть "C:\folder\lib\file.jar")
![Example]()