Javaでバッチ実行

最近はバッチもJavaで書くことが多いんだけど、いつも悩むのが実行方法。JDKの素のままだとクラスパスの管理が面倒で悩む。
前使ったCommonsLauncherはそこそこ良かったけど、Linuxで動かした時にデフォルトエンコーディングがASCIIになってしまうのに悩まされたのであまり使いたくない。なので少しだけ試してみた。

条件

  • クラスパスの管理を楽にしてくれる
  • Webアプリと共通のクラスを使うが、出来ればファイル自体は別にしておきたい(バッチのみ更新するのにWebアプリのメンテが入るのは嫌なので)
  • Antから実行できる

Jar Jar Link

依存するJarを一つのJarの中に含めてくれるが、依存するJarにクラスパスが通るわけではない。

Fat Jar

依存するJar内のクラスをJarに含めてくれるそうで、条件には一番近い。
が、遅い。しかもAntのタスクが含まれているのに使い方がわからない。

地道に解凍&圧縮

結局テンポラリディレクトリに依存するJarの中身を解凍して、その後まとめてJar圧縮するように。こっちも結構遅いけど…。
と思ったらJavaMailとかはManifestの内容を引き継がないと動かないっぽい。FatJarはそこまでやってくれてるんですね。まあもうちょっと色々探して見ます。