Упаковка приложений Java для рабочего стола Windows/Linux
Я пишу приложение в Java для рабочего стола с использованием библиотеки SWT Eclipse для визуализации GUI. Я думаю, что SWT помогает Java преодолеть самое большое препятствие для принятия на рабочем столе: именно предоставление Java-приложения с последовательным, отзывчивым интерфейсом, который выглядит так, как принадлежащий любому другому приложению на вашем рабочем столе. Тем не менее, я считаю, что упаковка приложения по-прежнему является проблемой.
OS X изначально обеспечивает простой механизм для переноса приложений Java в собственные пакеты приложений, но создание приложения для Windows/Linux, которое не требует, чтобы пользователь запускал уродливый командный файл или нажимал на .jar, по-прежнему остается проблемой, Возможно, это не такая проблема для Linux, где пользователь, скорее всего, будет немного более технологичным, но в Windows я бы хотел иметь обычный .exe для его/ее работы.
Есть ли у кого-нибудь опыт работы с любыми инструментами генерации .exe для Java, которые там есть? Я пробовал JSmooth, но с ним были разные проблемы. Есть ли лучшее решение, прежде чем я взломаю Visual Studio и скачу свое?
Изменить: Возможно, я должен упомянуть, что я не могу тратить много денег на коммерческое решение.
Ответы
Ответ 1
Чтобы следить за ответом pauxu, я использую start4j и NSIS в своем проекте и думаю, что было бы полезно показать, как я их использую. Вот что я делаю для Windows. BTW, я создаю .app и .dmg для Mac, но пока не понял, что делать для Linux.
Проекты Копии запуска4j и NSIS
В моем проекте у меня есть каталог "vendor", и под ним у меня есть каталог для "launch4j" и "nsis". Внутри каждой из них есть копия установки для каждого приложения. Мне легче иметь копию, локальную для проекта, а не принуждать других устанавливать оба продукта и настраивать какую-то переменную окружения, чтобы указать на каждый.
Script Файлы
У меня также есть "скрипты" в моем проекте, который содержит различные файлы конфигурации / script для моего проекта. Сначала есть файл launch4j.xml:
<launch4jConfig>
<dontWrapJar>true</dontWrapJar>
<headerType>gui</headerType>
<jar>rpgam.jar</jar>
<outfile>rpgam.exe</outfile>
<errTitle></errTitle>
<cmdLine></cmdLine>
<chdir>.</chdir>
<priority>normal</priority>
<downloadUrl>http://www.rpgaudiomixer.com/</downloadUrl>
<supportUrl></supportUrl>
<customProcName>false</customProcName>
<stayAlive>false</stayAlive>
<manifest></manifest>
<icon></icon>
<jre>
<path></path>
<minVersion>1.5.0</minVersion>
<maxVersion></maxVersion>
<jdkPreference>preferJre</jdkPreference>
</jre>
<splash>
<file>..\images\splash.bmp</file>
<waitForWindow>true</waitForWindow>
<timeout>60</timeout>
<timeoutErr>true</timeoutErr>
</splash>
</launch4jConfig>
И затем появится NSIS script rpgam-setup.nsis. Он может принимать аргумент VERSION, чтобы указать имя файла.
; The name of the installer
Name "RPG Audio Mixer"
!ifndef VERSION
!define VERSION A.B.C
!endif
; The file to write
outfile "..\dist\installers\windows\rpgam-${VERSION}.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\RPG Audio Mixer"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\RPG_Audio_Mixer" "Install_Dir"
# create a default section.
section "RPG Audio Mixer"
SectionIn RO
; Set output path to the installation directory.
SetOutPath $INSTDIR
File /r "..\dist\layout\windows\"
; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\RPG_Audio_Mixer "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "DisplayName" "RPG Audio Mixer"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoRepair" 1
WriteUninstaller "uninstall.exe"
; read the value from the registry into the $0 register
;readRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion
; print the results in a popup message box
;messageBox MB_OK "version: $0"
sectionEnd
Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\RPG Audio Mixer"
CreateShortCut "$SMPROGRAMS\RPG Audio Mixer\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\RPG AUdio Mixer\RPG Audio Mixer.lnk" "$INSTDIR\rpgam.exe" "" "$INSTDIR\rpgam.exe" 0
SectionEnd
Section "Uninstall"
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer"
DeleteRegKey HKLM SOFTWARE\RPG_Audio_Mixer
; Remove files and uninstaller
Delete $INSTDIR\rpgam.exe
Delete $INSTDIR\uninstall.exe
; Remove shortcuts, if any
Delete "$SMPROGRAMS\RPG Audio Mixer\*.*"
; Remove directories used
RMDir "$SMPROGRAMS\RPG Audio Mixer"
RMDir "$INSTDIR"
SectionEnd
Ant Интеграция
У меня есть некоторые цели в моем файле сборки Ant (build.xml), чтобы обработать выше. Сначала я tel Ant для импорта задач start4j Ant:
<property name="launch4j.dir" location="vendor/launch4j" />
<taskdef name="launch4j"
classname="net.sf.launch4j.ant.Launch4jTask"
classpath="${launch4j.dir}/launch4j.jar:${launch4j.dir}/lib/xstream.jar" />
Затем у меня есть простая цель для создания исполняемого файла оболочки:
<target name="executable-windows" depends="jar" description="Create Windows executable (EXE)">
<launch4j configFile="scripts/launch4j.xml" outfile="${exeFile}" />
</target>
И еще одна цель для установки установщика:
<target name="installer-windows" depends="executable-windows" description="Create the installer for Windows (EXE)">
<!-- Lay out files needed for building the installer -->
<mkdir dir="${windowsLayoutDirectory}" />
<copy file="${jarFile}" todir="${windowsLayoutDirectory}" />
<copy todir="${windowsLayoutDirectory}/lib">
<fileset dir="${libraryDirectory}" />
<fileset dir="${windowsLibraryDirectory}" />
</copy>
<copy todir="${windowsLayoutDirectory}/icons">
<fileset dir="${iconsDirectory}" />
</copy>
<copy todir="${windowsLayoutDirectory}" file="${exeFile}" />
<mkdir dir="${windowsInstallerDirectory}" />
<!-- Build the installer using NSIS -->
<exec executable="vendor/nsis/makensis.exe">
<arg value="/DVERSION=${version}" />
<arg value="scripts/rpgam-setup.nsi" />
</exec>
</target>
Верхняя часть этого файла просто копирует необходимые файлы для установщика во временное место, а вторая половина выполняет script, который использует все это для создания установщика.
Ответ 2
В моей компании мы используем Launch4J для создания exe файла и NSIS, чтобы создать установщик с приложениями SWT.
Мы использовали его в течение многих лет в нескольких коммерческих приложениях, и пара работает нормально.
Ответ 3
Возможно, вам стоит взглянуть на IzPack. Несколько лет назад я создал очень хороший установщик, и я бы поспорил, что они все еще улучшают его. Он позволяет устанавливать документы, двоичные файлы и интерактивную ссылку для запуска приложения IIRC.
Ответ 4
Я использовал бесплатный Launch4J, чтобы создать пользовательскую панель запуска для моих программ Java в Windows. В сочетании со свободным NSIS Installer вы можете создать приятный пакет для ваших пользователей Windows.
Изменить: Не видел, чтобы вы использовали SWT. Не знаю, работает ли он с SWT, потому что я использовал только Swing в своих приложениях.
Ответ 5
Рассматривали ли вы запись небольшой программы на C/С++, которая просто вызывает CreateProcess
, чтобы запустить java VM с помощью jar ( или класс)?
Вы можете получить Visual С++ Express и легко собрать программу запуска. Это упростит добавление дружественного значка.
Ответ 6
Рассмотрим преобразование приложения в Eclipse RCP. Он написан в SWT, а среда Eclipse содержит инструменты упаковки, которые генерируют исполняемые файлы для всех основных платформ. Для окон он может генерировать zip или папку, содержащую ваш код. Для общего опыта установки я использую NSIS. На самом деле существует проект pack generator в eclipse для создания общих инсталляторов для всех поддерживаемых eclipse платформ.
Ответ 7
Задумывались ли вы о Java Web Start? Здесь - это учебное пособие, специально предназначенное для развертывания приложения SWT с Java Web Start.
Ответ 8
Install4J. Не бесплатно, но стоит того. Дайте пробный выстрел
Ответ 9
Теперь вы можете сделать это через Netbeans! Это очень просто и отлично работает. Ознакомьтесь с этим учебным курсом на веб-сайте Netbeans.
Ответ 10
Я прошел через то же самое и обнаружил, что все бесплатные варианты не очень хороши. Похоже, ты будешь писать свой собственный. Мне было бы интересно узнать, есть ли у кого-нибудь бесплатный/дешевый вариант, который работает
Ответ 11
Еще один вариант, который я рассматривал: вместо того, чтобы писать собственный пусковой механизм с нуля, Eclipse поставляется с исходным кодом для своей собственной пусковой установки, и это, возможно, может быть переназначено для моего приложения.
Позор, что Sun никогда не включал ничего подобного в JDK.
Ответ 12
Еще одно голосование за Launch4J, только что написало задачу ant сегодня утром, чтобы интегрироваться с одним из моих проектов. Кажется, очень хорошо работает
Ответ 13
Я использовал JSmooth в прошлом, и мне еще повезло. Пользовательский интерфейс довольно плохой, но я использую его только для создания файла конфигурации один раз, а затем после него создаю Ant.
Какие проблемы возникают с JSmooth?
Ответ 14
JSMooth отлично поработал для нас в производственной среде, где я сначала сгенерировал одну банку, используя один-jar (плагин с толстым банком для затмения), а затем завернул его в JSmooth.
(Обратите внимание, что мне нужен дистрибутив без установки одного файла, который мог бы предложить для установки JRE, если это необходимо).
Он работал так хорошо, что я думал, что никто не использует его:)
Ответ 15
Вы можете попробовать наш инструмент, BitRock InstallBuilder. Хотя это родное приложение, многие наши клиенты используют его для упаковки настольных приложений Java. Если вы объединяете JRE и создаете пусковую установку и т.д., Пользователю даже не нужно знать, что они устанавливают приложение Java. Это кросс-платформа, поэтому вы можете создавать инсталляторы для Windows и Mac (и Linux, Solaris и т.д.). Как и инструмент install4j, упомянутый в другом посте, это коммерческий инструмент, но у нас есть бесплатные лицензии на проекты с открытым исходным кодом и специальные скидки для microISVs/малого бизнеса и т.д., просто напишите нам по электронной почте. Также хотелось бы подчеркнуть, что это средство установки, поэтому оно не будет учитывать ваши потребности, если вы ищете только один исполняемый файл.
Ответ 16
В моей компании мы используем start4J и NSIS для распространения Windows и jdeb для дистрибутива Debian и Java Web Start для общей операционной системы. Это работает отлично.
Ответ 17
Попробуйте InstallJammer. Лучшее, что я использовал когда-либо. Свободный и мощный. И достаточный для личного и коммерческого использования.
Ответ 18
Рассматривали ли вы Advanced Installer?
Я использовал его специально для Windows и Mac. Никаких сценариев или Ant не требуется. Все графические интерфейсы. Очень просто и понятно. Не бесплатно, но стоит каждый пенни.
- Lauch as Administrator
- Ассоциация файлов
- Пользовательские темы установки + Встроенные темы
- Пакет с JRE
- Место установки
- Выполнение Native Splash экрана
- Вы можете создавать события и события установки
- Предпосылки
- Минимальная версия JRE и максимальная версия
И многое другое. И не заставляйте его скручиваться, у меня нет никаких связей с чуваками... их приложение просто потрясающее.