最近はバッチもJavaで書くことが多いんだけど、いつも悩むのが実行方法。JDKの素のままだとクラスパスの管理が面倒で悩む。
前使ったCommonsLauncherはそこそこ良かったけど、Linuxで動かした時にデフォルトエンコーディングがASCIIになってしまうのに悩まされたのであまり使いたくない。なので少しだけ試してみた。
条件
- クラスパスの管理を楽にしてくれる
- Webアプリと共通のクラスを使うが、出来ればファイル自体は別にしておきたい(バッチのみ更新するのにWebアプリのメンテが入るのは嫌なので)
- Antから実行できる
Jar Jar Link
依存するJarを一つのJarの中に含めてくれるが、依存するJarにクラスパスが通るわけではない。
Fat Jar
依存するJar内のクラスをJarに含めてくれるそうで、条件には一番近い。
が、遅い。しかもAntのタスクが含まれているのに使い方がわからない。
地道に解凍&圧縮
結局テンポラリディレクトリに依存するJarの中身を解凍して、その後まとめてJar圧縮するように。こっちも結構遅いけど…。
と思ったらJavaMailとかはManifestの内容を引き継がないと動かないっぽい。FatJarはそこまでやってくれてるんですね。まあもうちょっと色々探して見ます。