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

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

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

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

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

11.08.2008 12:37:50
Пожалуйста, перечислите те проблемы, которые у вас были с JSmooth.
Thorbjørn Ravn Andersen 8.11.2009 10:49:50
18 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

Файлы сценариев

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

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

30
14.09.2009 15:52:59
Не то чтобы я уже попробовал это, но это кажется очень полным, проголосуй за этот ответ!
Scott Bennett-McLeish 6.10.2008 06:50:48
вероятно, слишком дорого для большинства программных приложений для хобби :)
willcodejavaforfood 13.01.2009 10:39:50
«Во-первых, это файл install4j.xml». Хм, это должно означать launch4j.xml или что-то в этом роде?
Jonik 18.08.2009 23:40:53

Установить 4J . Не бесплатно, но оно того стоит. Дайте пробную попытку

1
11.08.2008 12:59:04
Утилита install4j хорошо работает, создавая полностью родные установщики Windows .exe (она также поддерживает другие целевые платформы). Кроме того, это отличный вариант для развертывания программного обеспечения Java . Более подробно о моем опыте работы с ним: stackoverflow.com/questions/759855/… Хотя это коммерческий инструмент, так что, возможно, он не совсем подходит для оригинального аскера.
Jonik 27.04.2009 12:30:57

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

0
11.08.2008 13:09:20

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

2
11.08.2008 13:48:31

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

7
12.08.2008 08:05:53
Wow с открытым исходным кодом, и похоже, что он все еще активен, тогда как jsmooth кажется довольно мертвым без обновлений за последний год.
willcodejavaforfood 13.01.2009 10:45:17

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

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

3
12.08.2008 08:21:36

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

Жаль, что Sun никогда не включала ничего подобного в JDK.

0
12.08.2008 08:55:33
На самом деле, они сделали, вроде. Исполняемый файл Eclipse использует JNI для запуска JVM, любой другой поставщик может создать собственный двоичный файл для запуска JVM в процессе.
Heath Borders 16.09.2008 20:24:21

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

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

4
25.08.2008 21:27:34

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

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

10
16.09.2008 17:05:46

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

0
16.09.2008 19:17:14

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

3
16.09.2008 20:22:59
Я рассмотрел Eclipse RCP, но он немного тяжел для моего проекта, который призван стать легким настольным инструментом для публикации блогов.
alexmcchessers 16.09.2008 20:42:26
Eclipse RCP не такой большой. Если вы сохраняете только необходимые классы для базового пользовательского интерфейса, ваши проекты зависят только от org.eclipse.runtime.core и org.eclipse.ui, у вас меньше 8 МБ, и вы получаете хорошую платформу, позволяющую вам управлять своими зависимостями ,
Mario Ortegón 24.09.2008 22:13:09

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

Какие проблемы возникают у вас с JSmooth?

0
28.10.2008 07:52:07

JSMooth очень хорошо работал для нас в производственной среде, где я сначала сгенерировал один jar, используя one-jar (плагин fat jar для затмения), а затем обернул его JSmooth.

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

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

0
13.01.2009 10:24:35
За исключением мелких изысков в пользовательском интерфейсе, я бы хотел, чтобы JSmooth генерировал EXE-файлы, которые также были действительными JAR-файлами. Это делает самораспаковщик info-zip.
Thorbjørn Ravn Andersen 13.01.2009 10:26:21

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

0
18.01.2009 12:49:56

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

0
31.07.2009 20:32:33

Пожалуйста, попробуйте InstallJammer . Лучший, который я когда-либо использовал. Бесплатный и мощный. И достаточно для личного и коммерческого использования.

0
27.03.2012 06:47:56

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

1
10.05.2014 15:24:15

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

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

- Lauch as Administrator - Связывание
файлов
- Пользовательские темы установки + Встроенные темы
- Пакет с JRE
- Расположение установки
- Реализация собственного экрана-заставки
- Вы можете создавать события и события установки
- Предварительные условия
- Минимальная версия JRE и максимальная версия

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

0
25.08.2014 06:17:01