2010年02月 / 01月≪ 12345678910111213141516171819202122232425262728≫03月

jarファイルに外部ライブラリを含めたい

2008.03.12 (Wed)

まぁ前回までの内容が問題なくできていれば、
今回のはすぐ終わります。

ここでファイル名は便宜的に以下のとおりとします。
本体jarファイル: main.jar
外部ライブラリファイル: swt.jar

俺が使った外部ライブラリがswtなんで、swtってことで。
他の外部ライブラリはまだ使ったことないから、
このやり方でできるかは知りません。
あと配布に際してはライセンスの問題もあるのでその辺も要確認。

ちなみに俺がダウンロードしてきたのはこれ。
swt-3.3.1.1-win32-win32-x86.zip
ついでに古い解説ページだとリンク切れとか結構あったので。
http://www.eclipse.org/swt/

さてさてswt.jarをmain.jarに詰める方法ですが、
これはjarファイルのまま詰めても動いてくれません。
ので、とりあえずswt.jarを解凍します。
中身はこんな感じでした。

swt
├ META-INF
│ └ MANIFEST.MF
├ org
│ └ eclipse
│   └ swt
│     └ 各種ライブラリ
├ swt-awt-win32-3347.dll
├ swt-gdip-win32-3347.dll
├ swt-wgl-win32-3347.dll
├ swt-win32-3347.dll
├ swt-xpcominit-win32-3347.dll
├ swt-xulrunner-win32-3347.dll
└ version.txt

この辺も古い解説サイトと違うよね。
よくswt.jarとxxxxx.dllをダウンロードしてきて〜
って書いてあるけど、
どこにdllファイルなんかあるんだよ・・・(´・ω;`)
って思ってました、しばらく。
どうやら最近のバージョンはdllもswt.jarに含まれてるらしいです。

んで、とりあえずこの中でいらなそうなのは、
META-INFとversion.txtあたりかな?
あと時間があればorg以下のライブラリ群から
未使用のものを削除すれば軽くなるね。
めんどそうだったから俺はやってないけどw

まぁその他はよくわからないんで全部詰めます(爆
前回の例で言うと、最終的な配置はこんな感じ。

作業フォルダ
├ パッケージ名
│ └ クラスファイル名.class
├ data.csv
├ manifest.mf
│<----------------------ここまでが自分のファイル
├ org
│ └ eclipse
│   └ swt
│     └ 各種ライブラリ
├ swt-awt-win32-3347.dll
├ swt-gdip-win32-3347.dll
├ swt-wgl-win32-3347.dll
├ swt-win32-3347.dll
├ swt-xpcominit-win32-3347.dll
└ swt-xulrunner-win32-3347.dll

これでDOSコマンドでjar化すれば完成。
ちなみにdllファイルなしでもやってみたんだけど・・・
動きましたww普通にwwww
まぁ俺の環境に因るところかもしれないから、
念のためdllはいれといたほうがいいと思うけどね。


追記 2008/04/05
dllファイルは、正しくはカレントディレクトリに配置するらしいです。
以下、Project Amateras より引用。

DLLはアプリケーションを実行する際のカレントディレクトリに配置してください(dllの検索パスに含まれていれば違う場所でもOKだと思います)。

これに従った上で、main.jarにswtライブラリを含めるには、
まず以下の構成で固めてmain.jarを作り、

作業フォルダ
├ パッケージ名
│ └ クラスファイル名.class
├ data.csv
├ manifest.mf
│<----------------------ここまでが自分のファイル
└ org
  └ eclipse
    └ swt
      └ 各種ライブラリ

それを次のような感じで配置して実行するって形になります。

main.jarが置いてあるディレクトリ
├ main.jar
├ swt-awt-win32-3347.dll
├ swt-gdip-win32-3347.dll
├ swt-wgl-win32-3347.dll
├ swt-win32-3347.dll
├ swt-xpcominit-win32-3347.dll
└ swt-xulrunner-win32-3347.dll

だから厳密にはdllファイルはmain.jarに含められないことになるね。
main.jarにdllファイルを含めてしまっても動作したのは、おそらく
dllの検索パスに含まれていれば違う場所でもOKだと思います
ってことなんでしょう。
「dllの検索パス」ってのがなんなのかはわかりませんが。

随分前からこの間違いには気づいていたんだけど、
まぁこんな記事誰も見ないだろwwと思って放置してたんだよねー
ところがさ、思いのほか「swt jar」とかで検索してくる人が多いんで、
こりゃいい加減修正しないとってことで今回加筆してみました(;・∀・)


さっ、おかげさまでjarファイル一枚で
プログラムが動くようになりましたよー!!
ちなみに今作ってるのはさぽているの図鑑みたいなやつなんだけど、
基本的に俺用だからね、現時点では配布する予定はないです。
まぁとりあえず人に見せられるくらいの完成度になってから考えようかw

それじゃ最後に今までのまとめ。
jarファイルダブルクリックで開けねぇ?
jarファイルをダブルクリックで実行1
jarファイルをダブルクリックで実行2
jarファイルにテキストファイルを含めたい
jarファイルに外部ライブラリを含めたい
10:49  |  PC関連  |  CM(0)  |  EDIT  |  Top↑

Comment

コメントを投稿する

Url
Comment
Pass  編集・削除するのに必要
Secret  管理者だけにコメントを表示  (非公開コメント投稿可能)
 

▲PageTop

 | HOME |