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?

War es hilfreich?

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top