質問

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

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

世の中にある Java 用の .exe 生成ツールを使用した経験のある人はいますか?JSmooth を試してみましたが、さまざまな問題がありました。Visual Studio を開発して独自のソリューションを開発する前に、より良い解決策はありますか?

編集: 商業的なソリューションに多額の資金を費やすことができないことを言及しておきます。

役に立ちましたか?

解決

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 ビルドファイル (build.xml) にいくつかのターゲットがあります。最初に、launch4j の Ant タスクをインポートするように 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>

インストーラーを作成するためのもう 1 つのターゲット:

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

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

他のヒント

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

私たちはこれをいくつかの商用アプリケーションで長年使用してきましたが、このペアは問題なく動作します。

たぶんあなたは見てみるといいでしょう イズパック. 。私は数年前に非常に優れたインストーラーを作成しましたが、彼らはまだそれを改良していると思います。ドキュメント、バイナリ、およびアプリケーションを起動するためのクリック可能なリンクをインストールできます。 ちゃんと覚えたら.

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

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

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

あなたは得ることができます Visual C++ Express スタートアッププログラムを非常に簡単に組み立てることができます。これにより、フレンドリーなアイコンも簡単に追加できるようになります。

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

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

インストール4J. 。無料ではありませんが、それだけの価値はあります。トライアルを試してみる

これを NetBeans を通じて実行できるようになりました。本当に簡単で完璧に機能します。チェックアウト これ Netbeans Web サイトのチュートリアル。

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

私が検討していた別のオプション:Eclipse には、ネイティブ ランチャーを最初から作成するのではなく、独自のランチャーのソース コードが付属しているため、これを私のアプリに再利用できる可能性があります。

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

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

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

JSmooth に関してどのような問題がありますか?

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

(必要に応じて JRE のインストールを求めるプロンプトが表示される、単一ファイルのインストール不要の配布が必要であることに注意してください)。

あまりにもうまく機能したので、誰も使っていないのではないかと思いました:)

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

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

してみてください インストールジャマー.今まで使った中で最高のもの。無料で強力。個人使用にも商用使用にも十分です。

アドバンスト インストーラーを検討したことがありますか?

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

- 管理者として起動
- ファイルの関連付け
- カスタムインストールテーマ + 組み込みテーマ
- JREを使用したパッケージ
- 設置場所
- ネイティブのスプラッシュ画面の実装
- イベント作成サービスやインストールイベントが可能
- 前提条件
- JREの最小バージョンと最大バージョン

他にもたくさんあります。誤解しないでください、私は彼らとは何のつながりもありません...彼らのアプリは本当に素晴らしいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top