Java 7が必要な実行可能jarをappにする方法です。ためしに航海日誌 (艦これ専用ソフトウェア)”)でやってみる。
必要な道具
Command Line Tools
ターミナルでxcode-select --install
とかやると、「Command Line Toolsが必要だけど入れる?」みたいなこと訊いてくるのでそれで入れます。
Apache Ant
Java Developer Packageをインストールするのが、設定とか楽だと思います。Pacifistを使用してAntの入っているJava Toolsだけインストールすることもできます。
これだとAntが古いので、Homebrewから入れたりしたほうがいいです。
JDK7
当たり前だけど要ります。Oracleのページから入れます。
Java SE Development Kit 7 – Downloads | Oracle Technology Network | Oracle
Antから参照するのにJAVA_HOMEを設定しとかないといけないみたいなので、インストール後にvi ~/.bash_profile
で.bash_profileに以下を書き込みます。
export JAVA_HOME=$(/usr/libexec/java_home)
ESC
でinsertを抜けて、:wq
で保存して終了。source .bash_profile
で再読み込みを忘れずに。
Xcode
メインのツールであるAppBundlerが10.8 SDKを要求してくるので、容量取るから入れたくないけど必要です。Mac App Storeから入れます。
材料の準備
AppBundler
Oracle純正のAppBundlerは貧弱なため、The Infinite Kindによるフォークを使用します。
infinitekind / appbundler — Bitbucketからソースコードをダウンロードします。
- 「ダウンロード」のリンクを開くとzipファイルが落ちてくるので、展開します。Mercurialがあるなら
hg clone
してもいいです。 - そのあとそのフォルダに移動します。ターミナルに`` と入力して、フォルダをドラッグ&ドロップしてくると楽です。
ant
と入力して実行すると、現在のディレクトリにある「build.xml」ファイルに従ってビルドが行われます。正常に終わると、新しくできた「bin」フォルダの中に「appbundler-1.0ea.jar」というファイルが出来ています。- 「appbundler-1.0ea.jar」ファイルを、Antのlibディレクトリに入れます。AntをJava Developer Packageからインストールした場合、場所は
/usr/share/ant/lib/
です。これでAppBundlerの準備は完了です。
航海日誌
公式サイト”)から実行ファイル(ソースコードではありません)をダウンロードして展開します。
build.xml
Antは、build.xmlというファイルに書かれている内容に従って処理を行います。なので、build.xmlを用意する必要があります。以下の内容を「build.xml」というファイル名で、航海日誌のフォルダ(「logbook.jar」のある場所)に保存します。エンコードはUTF-8です。
<?xml version="1.0" encoding="UTF-8" ?>
<project default="create_app">
<taskdef name="bundleapp"
classname="com.oracle.appbundler.AppBundlerTask"
classpath="lib/appbundler-1.0ea.jar"/>
<property environment="env"/>
<property name="appname" value="logbook"/>
<!-- 上の行のlogbookの部分が.appの名前になります -->
<target name="create_app">
<bundleapp outputdirectory="."
name="${appname}"
displayname="logbook"
identifier="net.sanaechan.kancolle"
WorkingDirectory="$APP_ROOT/Contents/Java">
mainclassname="logbook.gui.ApplicationMain">
<classpath file="logbook.jar"/>
<option value="-XstartOnFirstThread"/> <!-- 起動時オプション -->
</bundleapp>
<copy todir="./${appname}.app/Contents/Java">
<fileset dir=".">
<exclude name="logbook.jar"/>
<exclude name="build.xml"/>
<exclude name="${appname}.app/**/*"/>
<exclude name="${appname}.app"/>
</fileset>
</copy>
</target>
</project>
調理
AppBundlerのときと同じように、build.xmlのあるディレクトリに移動してant
を実行します。すぐに.appの出来上がり!
要するに
tree -L 3
で出来上がった.app内の構造を調べてみると、以下のようになります。
. └── Contents ├── Info.plist ├── Java │ ├── logbook.jar │ ├── logbook_lib │ ├── readme.txt │ └── sound ├── MacOS │ └── JavaAppLauncher ├── PkgInfo ├── PlugIns └── Resources ├── GenericApp.icns └── en.lproj
.appをダブルクリックするとJavaAppLauncherがInfo.plistの通りにJavaを実行します。つまり、肝のJavaAppLauncherとInfo.plistさえどうにかできれば、build.xmlを書くよりも楽にアプリケーションにできる可能性があります。どっちが楽かと言われると判断の難しいところではありますが。