Ja, es ist möglich. Sie können unter jedem eine weitere Klasse mit einer Hauptmethode hinzufügen, die die gewünschte Klasse/Methode basierend auf dem Argument ausführt.
z.
public static void main(String... args) {
if ("foo".equals(args[0])) {
Foo.main(args);
} else if ("bar".equals(args[0])) {
Bar.main(args);
}
}
(nicht zu vergessen die offensichtlichen Kontrollen hinzuzufügen du wie args.length
usw.)
Welche Sie wie folgt verwendet werden:
java -jar YourJar.jar foo
Wenn gut gestaltet, dies kann jedoch machen Sie die main()
Methode der anderen Klassen überflüssig. Z.B.
public static void main(String... args) {
if ("foo".equals(args[0])) {
new Foo().execute();
} else if ("bar".equals(args[0])) {
new Bar().execute();
}
}
zu abstrahieren diese mehr (um loszuwerden if/else-Blöcke), könnte man erwägen, sie implementieren einige Action
Schnittstelle mit einem void execute()
und halten sie in einem Map
erhalten lassen:
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();
}
Dies funktioniert nicht mit dem ausführbaren Eclipse-Export, da sie das Laden an einen benutzerdefinierten Classloader delegieren. –
Dies funktioniert nicht, wenn Sie das Class-Path-Attribut haben –