アプリには2つのメインクラスがあります。 (Eclipseエクスポート機能を使用して)実行可能なjarにパッケージ化する場合、デフォルトのメインクラスを選択する必要があります。
実行時にjarからデフォルト以外のメインクラスにアクセスする方法はありますか?
_Java -cp myapp.jar com.example.Main1
_と_Java -cp myapp.jar com.example.Main2
_の両方からアクセスできます。 jarのデフォルトのメインクラスは、_Java -jar myapp.jar
_を介してアプリを呼び出すときに使用します。
詳細は JAR_(file_format) を参照してください。 Eclipseでメインクラスを選択すると、次のように設定されます。jarマニフェスト内の_Main-Class: myPrograms.MyClass
_ jarファイル内の_META-INF/MANIFEST.MF
_。
はい、可能です。それぞれの下に、引数に基づいて目的のクラス/メソッドを実行するメインメソッドを持つ別のクラスを追加できます。
例えば。
_public static void main(String... args) {
if ("foo".equals(args[0])) {
Foo.main(args);
} else if ("bar".equals(args[0])) {
Bar.main(args);
}
}
_
(_args.length
_などの明らかなチェックを自分で追加することを忘れないでください)
次のように使用できます。
_Java -jar YourJar.jar foo
_
ただし、適切に設計されている場合は、他のクラスのmain()
メソッドが不要になる可能性があります。例えば。
_public static void main(String... args) {
if ("foo".equals(args[0])) {
new Foo().execute();
} else if ("bar".equals(args[0])) {
new Bar().execute();
}
}
_
これをより抽象化するには(if/elseブロックを取り除くために)、Action
インターフェースをvoid execute()
で実装し、Map
:
_private static Map<String, Action> actions = new HashMap<String, Action>();
static {
actions.put("foo", new Foo());
actions.put("bar", new Bar());
}
public static void main(String... args) {
actions.get(args[0]).execute();
}
_