jarで複数のmainを扱う
javaで作った複数のバッチ処理を一つのjarにまとめようと思ったのですが、他のjarライブラリー等を含めた実行可能jarだと特殊なクラスローダ経由で実行する為、実行できるメインのクラスが一つしか設定出来ないらしい。(eclipseで作ったjar)
ほぼ同じコードやライブラリーを使っているので複数のjarを作るのも野暮ったい感じがしたので、以下の様なエントリー用のクラスを作って一つのjarにまとめました。
public class EntryPoint { public static void main(String[] args) { String[] sendArgs = new String[args.length - 1]; for (int i = 0; i < sendArgs.length; i++) { sendArgs[i] = args[i + 1]; } String className = args[0]; try { Class<?> main = Class.forName(className); Object[] vargs = {sendArgs}; main.getMethod("main", new Class[] { String[].class }) .invoke(null, vargs); } catch (Eception e) { e.printStackTrace(); } } }
上記のクラスを実行可能jarのメインのクラスに設定して以下の様に実行すればOK。
java -jar Hoge.jar packagename.MainClassName real args