Launch4J-как присоединить зависимые банки к сгенерированному exe
У меня есть простой проект java, который требует внешних банок. Я строю это с netbeans и после команды Clean и Build, я могу найти в каталоге dist следующую структуру:
-myApp.jar
-lib/
library1.jar
library2.jar
Типично, я бы сказал.
Теперь я хотел бы распространить свое приложение.jar с зависимыми библиотеками в виде одного exe. Возможно ли это? Я пытаюсь использовать Launch4J. В GUI я создаю файл config, есть несколько вариантов в СР раздела
<cp>lib/swing-layout-1.0.4.jar</cp>
Но это, кажется, classpath, и это это единственное место, где я могу сослаться на мои дополнительные банки.
После создания exe-файла я не могу найти зависимые библиотеки в exe (exe можно открыть с помощью winrar), и поэтому мое приложение аварийно завершает работу.
Как я могу сделать файл exe правильно тогда?
Спасибо за помощь.
5 ответов:
Как это часто бывает, будучи не в состоянии решить проблему, я опубликовал его на StackOverflow ... и вскоре после публикации вопроса у меня появилась идея.
Итак, ответ на мой вопрос таков:Поместите все зависимые банки в одну основную банку.
Мне потребовалось некоторое время, чтобы найти информацию, как я могу это сделать. Чтобы помочь людям, я решил опубликовать здесь подробную инструкцию - они основаны на Netbeans 7.4.
Следующая статья из http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/ я создал сценарий ant, который строит для меня приложение one-jar. Я мог бы тогда вручную создать exe через Launch4J
Затем я решил, что мне нужна более автоматизированная задача, и я сделал это, Ant строит exe для меня (через Launch4J)
Затем я понял, что я должен сделать "очистить и построить" перед моей автоматизированной задачей (в пункте 2) / я решил, что я хочу, чтобы очистить и построить было сделано автоматически перед сборкой exe
Собирая все вместе, я прилагаю свой сценарий сборки ant, состоящий из пунктов 1,2,3:
Требуется отредактировать сборку.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 щелкните правой кнопкой мыши на сборке.xml и выберите: Выполнить Target / другие цели / package-for-launch4j
Exe-файл готов в папке exe: -)
Я потратил на это несколько часов. Итак, вот мой вклад.
Проблема здесь: как удачно поставить ваши внешние банки, которые ваши .Нужна программа Jar в .exe, который вы генерируете.
Мы предполагаем, что вы уже, и правильно, настроили внешние jars на eclipse/netbeans и все прекрасно работают с командой: java-jar yourprogram.кувшин.
Таким образом, реальная проблема заключается в том, как обеспечить это .EXE-файл будет содержать внешние банки, в противном случае он не будет работать должным образом.
1) Прежде всего, вам нужно забыть Launch4J и любую другую программу.
2) Установите JSmooth, я рекомендую вам использовать версию windows.
3) в левом меню есть кнопка "приложение". Щелкнуть по нему.
4) вы увидите вкладку "Classpath" панель. Нажмите на плюс ( + ) и добавьте свой внешний .файлы Джара. И это все!!
Не забудьте поставить свой .jar приложение Маркировка флажок "Использовать am embedded jar" и правильно выбрать основной класс. Это сработает.
Размещение различных ссылок мест, которые помогли мне
Как включить все зависимые банки в одну неисполняемую банку?
Как создать исполняемый файл JAR с зависимостями с помощью Maven?
Http://www.mkyong.com/java/how-to-make-an-executable-jar-file/
И самое главное
Http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
Quick tut
Http://www.mkyong.com/java/how-to-add-your-manifest-into-a-jar-file/
Я также столкнулся с той же проблемой при переносе моего .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
- перейдите на вкладку classpath. Отметьте CustomClasspath. Нажмите кнопку Обзор и перейдите к файлу jar, который находится в папке dist.
- укажите минимальную версию Jre на вкладке JRE.
- сохраните конфигурацию.
- Создайте оболочку (щелкнув значок настроек)
- Ваш exe файл будет создан в папке dist. Вот и все:)