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 10

5 ответов:

Как это часто бывает, будучи не в состоянии решить проблему, я опубликовал его на StackOverflow ... и вскоре после публикации вопроса у меня появилась идея.

Итак, ответ на мой вопрос таков:

Поместите все зависимые банки в одну основную банку.

Мне потребовалось некоторое время, чтобы найти информацию, как я могу это сделать. Чтобы помочь людям, я решил опубликовать здесь подробную инструкцию - они основаны на Netbeans 7.4.
  1. Следующая статья из http://mavistechchannel.wordpress.com/2010/08/17/how-to-build-a-single-jar-file-with-external-libs/ я создал сценарий ant, который строит для меня приложение one-jar. Я мог бы тогда вручную создать exe через Launch4J

  2. Затем я решил, что мне нужна более автоматизированная задача, и я сделал это, Ant строит exe для меня (через Launch4J)

  3. Затем я понял, что я должен сделать "очистить и построить" перед моей автоматизированной задачей (в пункте 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 в exe. У меня также было много зависимых библиотек. Итак, вот какие шаги я выполнил:

  1. Загрузите и установите launch4j.

  2. Откройте свой проект в netbeans. Очистите и постройте проект.

  3. убедитесь, что в каталоге проекта есть папка с именем dist. Он будет иметь ваши файлы jar с папкой lib (содержащей зависимые библиотеки).
  4. открыть запуск 4j.
  5. Создание вывода файл в папке dist. Например: OutputFile: D:*** * * * \My_App\dist\my_application.exe
  6. просмотрите файл jar в следующей строке. Например: Jar: D: * * * * * * \My_App\dist\my_application.jar
  7. перейдите на вкладку classpath. Отметьте CustomClasspath. Нажмите кнопку Обзор и перейдите к файлу jar, который находится в папке dist.
  8. укажите минимальную версию Jre на вкладке JRE.
  9. сохраните конфигурацию.
  10. Создайте оболочку (щелкнув значок настроек)
  11. Ваш exe файл будет создан в папке dist. Вот и все:)

Чтобы включить внешние библиотеки с Launch4j, вы должны иметь ".jar " файлы внешних библиотек рядом с вашими .exe (мои находятся как раз в той же папке), то в "Classpath" вы ставите в путь к .файлы jar в "Edit Item:"