Java アプリケーションを Mac OS X .app バンドルにバンドルしようとしています。私は現在appbundlerを使用しており、 Oracle のガイドに従いました。Ant タスクは Netbeans で正常に動作し、対応する .app パッケージは (Windows 上で) 正しくビルドされます。しかし、MacBookPro (OS X 10.7.5) に対して .app パッケージを実行しようとすると、ログに次のエラーが表示されます。
[0x0-0x72072].ch.lawsuite.core.Servitus: Error: Unable to access jarfile LawSuiteSE.jar
.jar ファイルのアクセス許可を既に確認しており、実行ビットは main-jar と lib-folder 内のすべての jar に設定されています。
端末に次のように入力すると、アプリケーションは正常に実行されます。
java -jar /Applications/Servitus.app/Contents/Java/LawSuiteSE.jar --installer
明確にするために、最終的なフォルダー構造は次のとおりです。
Servitus.app
|_Contents
|_Java
|_LawSuiteSE.jar
|_lib
|_lib1.jar
|_lib2.jar
|_subfolder1
|_lib3.jar
|_subfolder2
|_lib4.jar
|_etc...
|_MacOS
|_JavaAppLauncher
|_PlugIns
|_Resources
|_en.lproj
|_Localizable.strings
|_kplus.icns
|_Info.plist
|_PkgInfo
ちなみに、私のアプリケーションには多くの外部依存関係があり、すべて「lib」フォルダーにあり、実行可能な main-jar ファイル「LawSuiteSE.jar」の MANIFEST.MF ファイル内のクラスパス プロパティによって適切にリンクされています。appbundle-ant-task 内でこれらのライブラリをコピーする必要がありますか、それとも後で手動でコピーしても問題ありませんか?
また、アプリケーションと対応する .app パッケージを MacBook Pro でビルドしようとしましたが、同じエラー メッセージが表示されました。
これが私のAntタスクです:
<!-- Define the appbundler task -->
<taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask"/>
<!-- Create the app bundle -->
<target name="bundle-macosx">
<bundleapp outputdirectory="macosx"
name="Servitus"
displayname="Servitus"
identifier="ch.lawsuite.core.Servitus"
shortversion="1.0"
applicationCategory="public.app-category.business"
icon="src/ch/lawsuite/data/icons/gmbh/osx/kplus.icns"
mainclassname="ch.lawsuite.core.Servitus">
<classpath file="dist/LawSuiteSE.jar"/>
<argument value="--installer"/>
</bundleapp>
</target>
編集: その間、Contents/MacOS の JavaAppLauncher を小さな実行スクリプト (start.sh) に置き換えました。
#!/bin/bash
java -Xms256m -XX:PermSize=128m -jar /Users/salocinx/Workspace/LawSuiteSE.app/Contents/Java/LawSuiteSE.jar --installer
次に、Info.plistのキーCFBundleExecutableの値をJavaAppLauncherからstart.shに置き換えました。
現在は問題なく動作していますが、jar 実行可能ファイルへの相対パスを使用するにはどうすればよいですか? 「../Java/LawSuiteSE.jar」のようなものは機能せず、以前と同じエラーが表示されます。スクリプトが次のようになるように、「$APP_ROOT」のような現在の app-folder を指す定数はありますか。
#!/bin/bash
java -Xms256m -XX:PermSize=128m -jar $APP_ROOT/Contents/Java/LawSuiteSE.jar --installer
何か案は?