アプリには 2 つの主要なクラスがあります。(Eclipse エクスポート機能を使用して) 実行可能な jar にパッケージ化するとき、デフォルトのメイン クラスを選択する必要があります。
実行時にjarからデフォルト以外のメインクラスにアクセスする方法はありますか?
アプリには 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 ブロックを取り除くため)、 a を使用していくつかのAction
インターフェイスを実装void execute()
し、 a でそれらを保持できるようにすることを検討でき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();
}