Auswählen Hauptklasse in ein lauffähiges Glas zur Laufzeit
-
19-09-2019 - |
Frage
Ich habe zwei Hauptklassen in der App. Wenn ich es auf ein lauffähiges JAR-Paket (Eclipse-Export-Funktion) Ich habe eine Standard-Hauptklasse wählen.
Gibt es eine Möglichkeit, die Nicht-Standard-Hauptklasse aus dem Glas zur Laufzeit zugreifen?
Lösung
Sie können sowohl Zugriff über java -cp myapp.jar com.example.Main1
und java -cp myapp.jar com.example.Main2
. Die Standard-Hauptklasse im Glas ist, wenn Sie Ihre App über java -jar myapp.jar
aufrufen.
Siehe JAR_ (FILE_FORMAT) für weitere Details. Wenn Sie die Hauptklasse in Eclipse wählen ist, was in gesetzt wird. Innenseite des Glases manifestieren Main-Class: myPrograms.MyClass
in Seite der JAR-Datei META-INF/MANIFEST.MF
Andere Tipps
Ja, es ist möglich. Sie können, dass eine andere Klasse mit einem Hauptverfahren unter jedem hinzuzufügen, die die gewünschte Klasse / Methode auf das 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);
}
}
(vergessen Sie nicht die offensichtlichen Kontrollen selbst wie args.length
und so weiter hinzuzufügen)
Welche Sie verwenden können, wie folgt:
java -jar YourJar.jar foo
Wenn gut gestaltet, kann dies jedoch macht die main()
Methode der anderen Klassen überflüssig. Z.
public static void main(String... args) {
if ("foo".equals(args[0])) {
new Foo().execute();
} else if ("bar".equals(args[0])) {
new Bar().execute();
}
}
Um abstrakt dies mehr (um loszuwerden if / else-Blöcke), könnte man erwägen sie eine Action
Schnittstelle mit einem void execute()
implementieren zu lassen und bekommen von ihnen halten in einem 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();
}