Упаковка Java-приложений для рабочего стола Windows / Linux

голоса
36

Я пишу приложение на Java для рабочего стола с использованием библиотеки Eclipse, SWT для GUI рендеринга. Я думаю, SWT помогает Java преодолеть самую большое препятствие для принятия на рабочем столе, а именно: обеспечение приложения Java с последовательным, отзывчивым интерфейсом, который выглядит, что принадлежность к какому-либо другому приложению на ваш рабочем столе. Тем не менее, я считаю, что упаковка приложение по-прежнему является проблемой.

OS X изначально предоставляет простой механизм для обертывания Java-приложений в родных пучках приложений, но производит приложение для Windows / Linux, которая не требует от пользователя для запуска уродливого пакетного файла или нажмите на .jar еще хлопоты. Возможно, это не такая проблема, на Linux, где пользователь, скорее всего, будет немного более технически подкованные, но на Windows я хотел бы иметь регулярный exe-файл для него / нее бежать.

Кто-нибудь имел опыт работы с любой из инструментов .exe поколения для Java, которые там? Я попытался JSmooth, но имел различные проблемы с ним. Есть ли лучшее решение, прежде чем я треснуть из Visual Studio и катиться самостоятельно?

Edit: я , возможно , следует отметить , что я не могу тратить много денег на коммерческое решение.

Задан 11/08/2008 в 13:37
источник пользователем
На других языках...                            


18 ответов

голоса
29

Для того, чтобы следить за ответом pauxu, я буду использовать launch4j и NSIS на проекте шахты и думал, что было бы полезно, чтобы показать, как я их использовать. Вот что я делаю для Windows. Кстати, я создаю .app и .dmg для Mac, но не понял, что делать для Linux пока нет.

Копии проекта по launch4j и NSIS

В моем проекте у меня есть «поставщик» каталог и под ним у меня есть каталог для «launch4j» и «НСИ». Внутри каждой копия установки для каждого приложения. Я считаю, что легче иметь копию локальную к проекту, а не заставлять другие установить оба продукт и создать какое-то переменное окружение, чтобы указать каждый из них.

файлы сценария

У меня также есть «сценарии» каталог в моем проекте, который содержит различные файлы конфигурации / скрипт для моего проекта. Во-первых есть файл 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 скрипт 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 файла построения) для обработки выше. Сначала я тела Ant импортировать Ant задачи launch4j в:

<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>

Верхняя часть этого просто копирует необходимые файлы для программы установки во временную папку, а вторая половина выполняет скрипт, который использует все это, чтобы сделать установку.

Ответил 29/09/2008 в 19:16
источник пользователем

голоса
10

В моей компании мы используем Launch4J , чтобы создать исполняемый файл, и NSIS для создания установки, с SWT приложений.

Мы использовали его в течение многих лет в нескольких коммерческих приложениях и пара работает отлично.

Ответил 16/09/2008 в 18:05
источник пользователем

голоса
7

Может быть , вы должны смотреть на IzPack . Я создал очень хороший инсталлятор несколько лет назад , и я бы пари , что они по - прежнему его улучшения. Это позволяет устанавливать документы, исполняемые файлы и активная ссылка для запуска приложения IIRC .

Ответил 12/08/2008 в 09:05
источник пользователем

голоса
4

Я использовал бесплатный Launch4J для создания пользовательского запуска для моих программ Java на Windows. В сочетании со свободным NSIS Installer вы можете построить хороший пакет для пользователей Windows.

Изменить: Не видел , что вы используете SWT. Не знаю , работает ли он с SWT , а также, потому что я использовал только качание в моих программах.

Ответил 25/08/2008 в 22:27
источник пользователем

голоса
3

Рассмотрим преобразование приложения в Eclipse RCP . Она написана в SWT и Eclipse IDE содержит упаковочные средства , которые создают исполняемые файлы для всех основных платформ. Для окон, он может генерировать почтовый индекс или папку , содержащую код. Для общего опыта установки, я бы с помощью NSIS. Существует на самом деле пакеты генератор проект в затмении , чтобы создать общие инсталляторы для всех платформ затмений опора.

Ответил 16/09/2008 в 21:22
источник пользователем

голоса
3

Рассматривали ли вы писать небольшую программу на C / C ++ , которая просто вызывает CreateProcessдля запуска виртуальной машины Java с банкой (или класс) файл?

Вы можете получить Visual C ++ Express , и собрать программу запуска довольно легко. Это позволит легко добавить дружественный значок , а также.

Ответил 12/08/2008 в 09:15
источник пользователем

голоса
2

Задумывались ли Вы о Java Web Start ? Вот учебник , специально для развертывания приложения SWT с Java Web Start.

Ответил 11/08/2008 в 14:48
источник пользователем

голоса
1

Теперь вы можете сделать это через Netbeans! Это очень легко и прекрасно работает. Проверьте этот учебник на сайте Netbeans.

Ответил 10/05/2014 в 16:24
источник пользователем

голоса
1

Install4j . Не бесплатно, но стоит. Дайте Trial выстрел

Ответил 11/08/2008 в 13:59
источник пользователем

голоса
0

Рассматривали ли вы Advanced Installer?

Я использовал его долевой специально для ОС Windows и Mac. Нет сценариев или муравей не требуется. Все GUI. Очень просто и понятно. Не бесплатно , но стоит каждого пенни.

- Lauch в качестве администратора
- Ассоциации файлов
- Выборочная установка темы + В построенных Themes
- пакет с JRE
- Установить местоположение
- реализация экрана Native Всплеск
- Вы можете создать событие услуги и события установки
- Предварительные условия
- JRE минимальная версия и максимальная версия

И многое другое. И не получить его крутили, я не имею никаких связей с чуваками ... их приложение является просто удивительным.

Ответил 25/08/2014 в 07:17
источник пользователем

голоса
0

Пожалуйста , попробуйте InstallJammer .the лучший тот , который я использовал когда - либо. Свободный и powerful.And достаточно для личного и коммерческого использования.

Ответил 27/03/2012 в 07:47
источник пользователем

голоса
0

В моей компании мы используем launch4J и NSIS для распределения окон и jdeb для распределения Debian, и Java Web Start для операционной системы общего назначения. Это работает очень хорошо.

Ответил 31/07/2009 в 21:32
источник пользователем

голоса
0

Вы можете попробовать наш инструмент, BitRock InstallBuilder . Несмотря на то, что это родное приложение, многие из наших клиентов используют его для упаковки настольных Java - приложений. Если вы связывайте JRE и создать пусковые и т.д. пользователю не нужно даже знать , что они установку приложения Java. Это кросс - платформенный, так что вы можете создавать инсталляторы для Windows , так и Mac (и Linux, Solaris и т.д.) Как и install4j инструмент упоминается в другом посте, это коммерческий инструмент, но у нас есть бесплатные лицензии для проектов с открытым исходным кодом и специальных скидок для microISVs / малого бизнеса и т.д. просто напишите нам по электронной почте. Также хотелось бы подчеркнуть , что это инструмент инсталлятор, поэтому он не будет решать ваши потребности , если вы ищете только для одного исполняемого файла.

Ответил 18/01/2009 в 13:49
источник пользователем

голоса
0

JSMooth работал очень хорошо для нас в производственной среде, где я впервые генерируемой одну банку, используя одну банку (банку жира плагин к Eclipse), а затем, завернутые его с JSmooth.

(Обратите внимание, что я хотел распределение не-установки одного файла, который может Promt для установки JRE, если это необходимо).

Он работал так хорошо, что я думал, что никто не использовал его :)

Ответил 13/01/2009 в 11:24
источник пользователем

голоса
0

Я использовал JSmooth в прошлом, и все-таки повезло с ним. Интерфейс довольно глючный, но я использую только, что для создания конфигурационного файла один раз, а потом строить из Ant после этого.

Какие вопросы вы имея с JSmooth?

Ответил 28/10/2008 в 08:52
источник пользователем

голоса
0

Еще один голос за Launch4J, просто написал муравей задачу сегодня утром, чтобы интегрировать с одним из моих проектов. Кажется, работает очень хорошо

Ответил 16/09/2008 в 20:17
источник пользователем

голоса
0

Другой вариант я рассматривал: вместо того, чтобы писать родной запуск с нуля, Eclipse поставляется с исходным кодом для своей собственной ракеты-носителя, и это может возможно быть переориентировано для моего приложения.

Это позор, что ВС никогда не включали ничего подобного в JDK.

Ответил 12/08/2008 в 09:55
источник пользователем

голоса
0

Я прошел через то же самое, и обнаружил, что все свободные варианты не были очень хорошими. Похоже, вы будете писать свой собственный. Мне было бы интересно увидеть, если кто-то имеет свободный / дешевый вариант, который работает

Ответил 11/08/2008 в 14:09
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more