cactusman日誌 このページをアンテナに追加 RSSフィード

2008-04-27

[][]ぽすったーのようなCUIツールをJavaで作るときに悩んだ点

JavaCUIツールを作るうえで悩んだ点を。


まず、"java -jar hoge.jar"に引数を追加するのは冗長じゃないかなというところ。

解決案としてmvnbeansもやってるような、shやbatを用意してそのなかで"java -jar hoge.jar"を実行する。

そうすることで、"hoge command -c"というように短く出来る。

ただし、利用者にそのツール用の環境変数(どこにツールのjarがあるか)を設定してもらう必要がある。

まぁ、CUIで勝負するような人はその辺は大丈夫かな。


次に、依存jarの問題。

ぽすったーはTwitter4Jとargs4jに依存していて、使うときにはクラスパスにそれらのjarがなければならない。

またコンパイルするときにも必要で、ぽすったーはMaven2を使っているんだけど、Twitter4Jがリポジトリ上にないので自分のローカルリポジトリインストールしておく必要がある。

解決策はこれまたmvnbeansがやってるようにmaven-assembly-pluginを使って、libフォルダに依存jarを置いてマニュフェスとファイルにクラスパスを通すのを書いてやればいいらしい。

それで配布にはアーカイブにして渡す。

Twitter4JはBSDライセンス、args4jはMITライセンスで、一緒にしても著作権表示をすれば問題ないかと。

ただし、ライセンス問題がある場合はどうすればいいんだろうか。

ライセンス問題があると、やっぱりjarをユーザに落としてもらう必要があるかな。

またこの方法ではなく、FatjarやOne-jarといったテクニックを使うのもあり。

この方法だと配布にはjarひとつだけなのでお手軽。

問題はMaven2からどうやればいいのか、という点。

あと、ライセンスはこちらも同様、混ぜるな危険がありそう。


現時点ではこんな感じで、id:t_yano曰く、誰しも一度は通る道、ということなので他の人にも参考になるかな。

それにしてもJavaでここらへんがややこしいと再認識したところ:-p

kkawakkawa 2008/04/27 13:43 libフォルダに依存jarを置くよりは、uberjarを作りましょう。maven-assembly-pluginとjar-with-dependenciesで検索してみましょう。

cactusmancactusman 2008/04/27 22:51 調べてみたんですが、uberjarとOne-jarは概念的には同じなんじゃないかと思いますが、どうなんでしょうか?
どちらも内部に独自のクラスローダがあって、それがjar内のjarを呼び出す、というものだと認識してます。

kkawakkawa 2008/04/28 03:05 すいません。舌足らずでした。御指摘のとおり、一緒のものです。さらに、jar-with-dependenciesはjarの中にjarを入れるのではなくて、単にunjarしてjarしなおすだけのものです。が、僕はMavenから使うにはこれが一番簡単だと思います。

cactusmancactusman 2008/04/28 07:48 >単にunjarしてjarしなおすだけのもの
Fatjarと呼ばれるものと認識してます。
それが一番簡単みたいですので、依存jarについてはその方針でひとつにしてみます。

インギインギ 2008/05/02 02:50 リポジトリ立ててみました。よろしければお使いください:)

cactusmancactusman 2008/05/02 08:07 ありがとうございます。早速この連休中ぽすったーに反映させてみます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/cactusman/20080427/p2