(2015年4月12日に全面書き換え)
Java SWTアプリケーションを作成し、「ユーザ配布用のJARファイル」を作ったところ、SWTライブラリが見つからないというエラーに遭遇。
Eclipseでの外部ライブラリの登録と、Javaバージョンの指定
プロジェクト − プロパティ − Javaのビルドパス にて、SWTライブラリーを登録する。
プロジェクト − プロパティ − Javaのビルドパス にて、JREシステムライブラリーの設定を編集し、実行環境を適宜設定する。
なお、Java 8 (バージョン 1.8)の時は、推奨範囲の1.6か1.7までしかダウングレード出来ない。
ライブラリをjarファイルに同梱する手法
ファイル − エクスポート − Java より『実行可能JARファイル』のエクスポートを選択する
次に表示されるダイアログで、『生成されるJARに必須ライブラリーをパッケージ』を選択する
この状態で配布されるjarファイルは単体で配布可能で、次のコマンドで起動できる。
$ java -jar ○○○.jar
ライブラリをjarファイルに同梱しない手法
上の例で、『実行可能JARファイル』のエクスポートを選択した後のダイアログで、『生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー』を選択する。
パッケージされたjarを配布する場合、必須ライブラリーは指定された(当初出力された)ディレクトリに格納した状態で実行する必要がある。このディレクトリを変更する場合は、jarパッケージの中の次のファイルを編集し、ライブラリーの位置を指定する。
Manifest-Version: 1.0
Class-Path: . JavaTextViewer_lib/swt.jar
Main-Class: com.example.textviewer.test.TextViewerTest
ディレクトリは空白文字で区切り、最初はカレントディレクトリを示す「.」(ドット)でなければならない。
過去の記事(保存)
解決手法1
swt.jar ライブラリの全ファイルを、作成するjarファイルに格納する。
(swt.jarをバラバラに分解して、再格納して配布するのが、ライセンス上問題にならないか心配…)
オリジナルのjarファイル
swt.jarライブラリを無理やり追加したjarファイル
(赤でかこった部分が、swt.jarからコピーしてきた部分)
ファイルの展開・圧縮は、Gnomeの書庫マネージャを使って行っている。
(Windowsの場合は、素直にコマンドラインのjarを使うしかないかな…)
解決手法2
jarファイルのMETA-INF/MANIFEST.MFファイルを書き換えて、クラスライブラリのパスを追加する。
Manifest-Version: 1.0 Main-Class: HelloJavaSwt Class-Path: ./ ./swt.jar
こうしておいて、同じフォルダに配布するjarファイルと、swt.jarを格納すればOK。
なお、jarファイルはEclipseのファイルメニューのエクスポートで作成したものを使っているが、コマンドラインで作成することも出来る。
# jar cvfm test1.jar MANIFEST.MF *.class マニフェストが追加されました。 HelloJavaSwt.class を追加中です。(入 = 1188) (出 = 700)(41% 収縮されました)
jarファイルとマニフェストファイルの順序は、jarに与えるスイッチの fm というファイル順序に依存している。
参考にしたページ
Sun : jar - Java ARchive ツール
jarでファイルをまとめる
jarファイルに外部ライブラリを含めたい
最近、どうも脱線ぎみです…
本来なら、携帯電話用MIDPでプログラムを作る納期が迫っているにもかかわらず…