JAVA EXE化の手法 windows用 メモ書き
課題 jarファイルの配布の問題点
JAVAのjarファイルを配布する時に、配布先に対応するJAVAVMのインストールを求めなければならず、VMアップデート時に不具合が生じるケースがあります。
これまでの解決法
有効な手法としてはAOTコンパイラを用いてネイティブコード出力をする方法しかなかったが、GCJは開発を停止しており、java1.42までしか対応していなかった。実質的にexcelsior JETしか選択肢がなかった。(確か30万円ぐらいします。)
有効でないその他の手法
jar ファイルを単にexe化する手法 jsmooth等は、VMのインストールが必要で配布時には殆ど意味が無かった。
新たな解決法
Java Portableを用いて、vmのポータブル化を実現しつつ、ランチャーを自作して起動させる方法を考案しました。ダウンロードサイズは大きく増えますが、個別にインストールさせる手法よりもユーザーの負担は大幅に減ります。JAVAPORTABLE分容量が増えますが、30MBから40MB程度に収まります。
手順1 JAVA PORTABLE をダウンロード
http://portableapps.com/apps/utilities/java_portable
手順2 展開して例えばETRADEというフォルダに展開する事とします。
そして、展開したすべてのファイルはその下のJAVAに存在させます。
ETRADE-Java-|-bin-javaw.exe
|
|-lib
こんな感じに展開します。
手順3 Javaの下にdistフォルダを作り、作成したjarファイル(ここではetrade.jarとします)やlibフォルダを入れます。
ETRADE-Java-|-bin-javaw.exe
|
|-lib
|
|-dist-etrade.jar
|
|-lib-
こんな感じになります。
手順4 ランチャーを相対パスで起動できるように作成し、ETRADEフォルダに保存します。
JAVAのjarファイルを配布する時に、配布先に対応するJAVAVMのインストールを求めなければならず、VMアップデート時に不具合が生じるケースがあります。
これまでの解決法
有効な手法としてはAOTコンパイラを用いてネイティブコード出力をする方法しかなかったが、GCJは開発を停止しており、java1.42までしか対応していなかった。実質的にexcelsior JETしか選択肢がなかった。(確か30万円ぐらいします。)
有効でないその他の手法
jar ファイルを単にexe化する手法 jsmooth等は、VMのインストールが必要で配布時には殆ど意味が無かった。
新たな解決法
Java Portableを用いて、vmのポータブル化を実現しつつ、ランチャーを自作して起動させる方法を考案しました。ダウンロードサイズは大きく増えますが、個別にインストールさせる手法よりもユーザーの負担は大幅に減ります。JAVAPORTABLE分容量が増えますが、30MBから40MB程度に収まります。
手順1 JAVA PORTABLE をダウンロード
http://portableapps.com/apps/utilities/java_portable
手順2 展開して例えばETRADEというフォルダに展開する事とします。
そして、展開したすべてのファイルはその下のJAVAに存在させます。
ETRADE-Java-|-bin-javaw.exe
|
|-lib
こんな感じに展開します。
手順3 Javaの下にdistフォルダを作り、作成したjarファイル(ここではetrade.jarとします)やlibフォルダを入れます。
ETRADE-Java-|-bin-javaw.exe
|
|-lib
|
|-dist-etrade.jar
|
|-lib-
こんな感じになります。
手順4 ランチャーを相対パスで起動できるように作成し、ETRADEフォルダに保存します。
JAVA EXE化の手法 windows用 ランチャー編VBSscript
最終的にはEXE化したファイルを配布する事が目的ですが、直接ランチャーを作る場合は通常は開発環境を入れないといけないので、まずは、メモ帳で編集できるVBSスクリプトランチャーを作ってみました。
上記ETRADEフォルダと中身を、好きなところ(例えばデスクトップ)に置きます。
###に挟まれた下の部分をコピーアンドペーストして、launcher.vbsとしてvbsファイルをETRADEフォルダに作成します。ノートパッドで下記内容のテキストファイルを作って、拡張子を変更してください。 作成されたvbsファイルを実行するとjarが実行されます。
############################
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "Java\bin\javaw.exe -jar Java\dist\etrade.jar"
############################
このままでも十分に実用に耐えますが、何となくウィルスっぽくも見えます。インストーラーを使ってデスクトップにショートカットを作れば、気にならないレベルにはなります。ただし、アイコンが不恰好です。
そこで、あえてEXEファイルを作る事になります。
上記ETRADEフォルダと中身を、好きなところ(例えばデスクトップ)に置きます。
###に挟まれた下の部分をコピーアンドペーストして、launcher.vbsとしてvbsファイルをETRADEフォルダに作成します。ノートパッドで下記内容のテキストファイルを作って、拡張子を変更してください。 作成されたvbsファイルを実行するとjarが実行されます。
############################
Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "Java\bin\javaw.exe -jar Java\dist\etrade.jar"
############################
このままでも十分に実用に耐えますが、何となくウィルスっぽくも見えます。インストーラーを使ってデスクトップにショートカットを作れば、気にならないレベルにはなります。ただし、アイコンが不恰好です。
そこで、あえてEXEファイルを作る事になります。
VBSランチャーの実行ファイル化
先ほど作ったvbsファイルを実行形式にします。
MakeExe というソフトがベクターで発見できました。
今回はそれを使ってみます。
使い方は簡単で、vbsファイルをドラッグアンドドロップするだけです。
また、作成されたexeファイルのアイコンを変更するためにIconChangerを使います。
MakeExe
http://www.vector.co.jp/soft/winnt/prog/se389017.html
アイコンチェンジャー
http://www.vector.co.jp/soft/dl/win95/amuse/se372418.html
MakeExe というソフトがベクターで発見できました。
今回はそれを使ってみます。
使い方は簡単で、vbsファイルをドラッグアンドドロップするだけです。
また、作成されたexeファイルのアイコンを変更するためにIconChangerを使います。
MakeExe
http://www.vector.co.jp/soft/winnt/prog/se389017.html
アイコンチェンジャー
http://www.vector.co.jp/soft/dl/win95/amuse/se372418.html
配布 インストーラーの使用
ETRADEフォルダをZIPで圧縮すれば、すぐにでも配布できますが、インストーラーを使用すると見た目が良くなります。
ここではInno Setupというインストーラーを使いました。
http://www.jrsoftware.org/
使用法は簡単ですが、簡単に説明すると、メインファイルとしてlauncher.exeを指定しETRADEフォルダの中身(JAVAフォルダ等)をすべて入れます。後は流れで何とかなるでしょう。
この一連の作業で、java実行環境と共にjar実行ファイルを配布でき、ダウンロードサイズも30MB+実行ファイル分に留まり、多くのソフトは50MB程度のフットプリントに抑える事ができます。
インストールサイズは大きくなりますが、120MB程度で済むので問題ないと思います。
ここではInno Setupというインストーラーを使いました。
http://www.jrsoftware.org/
使用法は簡単ですが、簡単に説明すると、メインファイルとしてlauncher.exeを指定しETRADEフォルダの中身(JAVAフォルダ等)をすべて入れます。後は流れで何とかなるでしょう。
この一連の作業で、java実行環境と共にjar実行ファイルを配布でき、ダウンロードサイズも30MB+実行ファイル分に留まり、多くのソフトは50MB程度のフットプリントに抑える事ができます。
インストールサイズは大きくなりますが、120MB程度で済むので問題ないと思います。
対応OSの調査
Java7はWIN2000には対応していません。win xp sp3以降の対応となります。
java portableをjava 6に変えれば、win2000に対応するかもしれません。
windows 2008サーバーx64では動作を確認しました。 作成はwindows 7 x86(32bit)なので、特に変更を加えることなく64bitのwindowsに対応しそうです。
上記手法の対応OSは windows xp sp3以降、vista、windows7(32bit 64bit)、windows 2003 server windows 2008 server となりそうです。
ライセンス関係
これは微妙です。個人間・社内限定のアプリケーション配布に限定した方が無難です。なお、どうしても一般公開したい場合には、OpenJDKのソースコードをコンパイルしてランタイムを抽出したりといった方法もありうると思います。