実行可能なjar
jarファイルをダブルクリックするだけでJavaアプリケーションを起動させるための方法。
必要な物はjarファイル内にMETA-INF/MANIFEST.MFというファイルを用意するだけ。
例えばこんな感じ。
Manifest-Version: 1.0
Main-class: tv.kazu.sample.jar.AppMain
Main-class: tv.kazu.sample.jar.AppMain
あとはjarファイルをダブルクリックすればAppMainが実行される。
基本的な情報はきしださんのこのページとかを参考に。
さて、Javaで開発をしててclasspath関係で一度も悩んだこと無い人はいないと思う。
では上記のAppMainが他のjarファイル(以下外部jarファイルと呼ぶ)に依存しているとする。JDBCドライバーだったりLog4jだったり。その場合にはどういう解決方法があるだろうか。
結論から言うと3つ
- Manifest.cfにclasspathを相対パスで記述し、外部jarファイルを先ほど作成した実行可能なjarファイルからの正しい相対パスの場所に置く
- 外部jarファイルを解凍して、外部jarファイルに含まれていたclassファイルを実行可能jarファイルに含める
- lib/extディレクトリに外部jarファイルを入れる
オススメは1番かなぁ。自作の実行可能jarファイルとライブラリ等の外部jarファイルをユーザーを一つのディレクトリに入れて、そのディレクトリをまとめてユーザーに配布。
ここの675に書いてあるように、実行可能jarファイルの中に外部jarファイルを(classファイルに解凍せずに)そのまま含めて、それを参照させることはできないっぽい。
Java House MLにもこれに関係する投稿が。
しかし、結論に辿り着くまでに結構時間がかかった。Googleで検索してる時に、自分以外にも悪戦苦闘してる人が結構いたので(この人とか)、まとめてみた。