39

GUIレンダリング用のEclipseSWTライブラリを使用して、デスクトップ用のJavaでアプリケーションを作成しています。SWTは、Javaがデスクトップで受け入れられるための最大のハードルを乗り越えるのに役立つと思います。つまり、Javaアプリケーションに、デスクトップ上の他のアプリに属する​​ような一貫性のある応答性の高いインターフェイスを提供します。ただし、アプリケーションのパッケージ化は依然として問題だと感じています。

OS Xは、Javaアプリをネイティブアプリケーションバンドルにラップするための簡単なメカニズムをネイティブに提供しますが、ユーザーが醜いバッチファイルを実行したり.jarをクリックしたりする必要のないWindows/Linux用のアプリを作成するのは面倒です。おそらくそれは、ユーザーがもう少し技術に精通している可能性が高いLinuxではそのような問題ではありませんが、Windowsでは、ユーザーが実行できるように通常の.exeを使用したいと思います。

誰かがそこにあるJava用の.exe生成ツールのいずれかを使った経験がありますか?JSmoothを試しましたが、さまざまな問題がありました。Visual Studioをクラックして自分でロールする前に、より良い解決策はありますか?

編集: 私はおそらく、商用ソリューションに多額のお金を費やすことができないことを言及する必要があります。

4

18 に答える 18

32

pauxu の回答をフォローアップするために、私は私のプロジェクトで launch4j と NSIS を使用しており、それらをどのように使用しているかを示すことが役立つと考えました。これが私がWindowsのためにやっていることです。ところで、私は Mac 用に .app と .dmg を作成していますが、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 統合

上記を処理するために、Ant ビルドファイル (build.xml) にいくつかのターゲットがあります。まず、Ant に tel を送信して、launch4j の 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>

その上部では、インストーラーに必要なファイルを一時的な場所にコピーするだけで、後半ではそのすべてを使用してインストーラーを作成するスクリプトを実行します。

于 2008-09-29T18:16:22.020 に答える
10

私の会社では、Launch4Jを使用して exe ファイルを作成し、NSISを使用してインストーラーを作成し、SWT アプリケーションを使用しています。

いくつかの商用アプリケーションで何年も使用しており、ペアは正常に動作します.

于 2008-09-16T17:05:46.967 に答える
7

たぶん、IzPackを見てください。私は数年前に非常に優れたインストーラーを作成しましたが、彼らはまだそれを改善していると思います。ドキュメント、バイナリ、およびアプリケーションIIRCを起動するためのクリック可能なリンクをインストールできます。

于 2008-08-12T08:05:53.500 に答える
4

無料のLaunch4Jを使用して、Windows 上の Java プログラム用のカスタム ランチャーを作成しました。無料のNSIS インストーラーと組み合わせると、Windows ユーザー向けの優れたパッケージを作成できます。

編集: SWTを使用していることはわかりませんでした。アプリで Swing のみを使用したため、SWT でも機能するかどうかはわかりません。

于 2008-08-25T21:27:34.087 に答える
3

アプリケーションをEclipse RCPに変換することを検討してください。これはSWTで書かれており、Eclipse IDE にはすべての主要なプラットフォーム用の実行可能ファイルを生成するパッケージング ツールが含まれています。Windows の場合、コードを含む zip またはフォルダーを生成できます。一般的なインストール エクスペリエンスでは、NSIS を使用します。実際、Eclipse には、Eclipse がサポートするすべてのプラットフォーム用の共通インストーラーを作成するためのパッケージ ジェネレータープロジェクトがあります。

于 2008-09-16T20:22:59.130 に答える
3

CreateProcessjar (またはクラス) ファイルを使用して Java VM を起動するだけの小さなプログラムを C/C++ で作成することを検討しましたか?

Visual C++ Expressを入手して、スタートアップ プログラムを簡単に作成できます。これにより、フレンドリーなアイコンも簡単に追加できます。

于 2008-08-12T08:15:51.093 に答える
2

Java Web Startについて考えたことはありますか? これは、 JavaWebStartを使用してSWTアプリケーションをデプロイするためのチュートリアルです。

于 2008-08-11T13:48:31.593 に答える
1

Install4J。無料ではありませんが、それだけの価値があります。トライアルを試してみてください

于 2008-08-11T12:59:04.550 に答える
0

私は同じことを経験し、すべての無料オプションがあまり良くないことに気づきました。自分で書いているようです。誰かが機能する無料/安価なオプションを持っているかどうかを確認したいと思います

于 2008-08-11T13:09:20.330 に答える
0

私が検討していたもう 1 つのオプションは、ネイティブ ランチャーをゼロから作成するのではなく、Eclipse に独自のランチャーのソース コードが付属していることです。

Sun が JDK に同様のものを含めなかったことは残念です。

于 2008-08-12T08:55:33.150 に答える
0

JSMooth は、最初に one-jar (eclipse へのファット jar プラグイン) を使用して単一の jar を生成し、それを JSmooth でラップした実稼働環境で非常にうまく機能しました。

(必要に応じて JRE のインストールを促すことができる単一ファイルのインストール不要の配布が必要だったことに注意してください)。

誰も使っていないと思ったほどうまく機能しました:)

于 2009-01-13T10:24:35.910 に答える
0

私の会社では、Windows ディストリビューションに launch4J と NSIS、Debian ディストリビューションに jdeb、一般的なオペレーティング システムに Java Web Start を使用しています。これは非常にうまく機能します。

于 2009-07-31T20:32:33.607 に答える
0

Launch4J へのもう 1 つの投票は、今朝、私のプロジェクトの 1 つと統合するための ant タスクを作成したところです。本当にうまくいくようです

于 2008-09-16T19:17:14.810 に答える
0

私は過去に JSmooth を使用したことがありますが、まだうまくいっています。UI はかなりバグがありますが、構成ファイルをビルドするために一度だけ使用し、その後 Ant からビルドします。

JSmooth でどのような問題が発生していますか?

于 2008-10-28T07:52:07.767 に答える
0

当社のツールBitRock InstallBuilderをお試しください。これはネイティブ アプリケーションですが、多くのお客様がデスクトップ Java アプリケーションをパッケージ化するために使用しています。JRE をバンドルしてランチャーなどを作成すると、ユーザーは Java アプリケーションをインストールしていることを意識する必要さえありません。クロス プラットフォームであるため、Windows と Mac (および Linux、Solaris など) の両方のインストーラーを生成できます。別の投稿で言及されている install4j ツールと同様に、これは商用ツールです、オープン ソース プロジェクトの無料ライセンスと特別割引があります。 microISV / 小規模ビジネスなどの場合は、メールでお問い合わせください。また、これはインストーラー ツールであるため、単一の実行可能ファイルのみを探している場合は、ニーズに対応できないことを強調したいと思います。

于 2009-01-18T12:49:56.297 に答える
0

高度なインストーラーを検討しましたか?

特にWindowsとMacでいくつか使用しました。スクリプトや Ant は必要ありません。すべての GUI。とてもシンプルでわかりやすい。無料ではありませんが、すべてのペニーの価値があります。

- 管理者として起動
- ファイルの関連付け
- カスタム インストール テーマ + 組み込みテーマ
- JRE を含むパッケージ
- インストール場所
- ネイティブ スプラッシュ スクリーンの実装
- サービスおよびインストール イベントを作成できます
- 前提条件
- JRE の最小バージョンと最大バージョン

そしてもっとたくさん。そして、それをひねらないでください、私はその男とは何のつながりもありません...彼らのアプリはただ素晴らしいです.

于 2014-08-25T06:17:01.043 に答える
0

InstallJammerを試してみてください。今まで使った中で最高のものです。無料で強力です。個人的および商業的使用に十分です。

于 2012-03-27T06:47:56.027 に答える