Подтвердить что ты не робот

Выбор основного класса в исполняемой банке во время выполнения

У меня есть два основных класса в приложении. Когда я упаковываю его в runnable jar (используя функцию экспорта Eclipse), я должен выбрать основной класс по умолчанию.

Есть ли способ получить доступ к основному классу, отличному от стандартного, из флага во время выполнения?

4b9b3361

Ответ 1

Вы можете получить доступ как через java -cp myapp.jar com.example.Main1, так и java -cp myapp.jar com.example.Main2. Основной класс по умолчанию в банке - это когда вы вызываете свое приложение через java -jar myapp.jar.

Подробнее см. JAR_(file_format). Когда вы выбираете основной класс в Eclipse, это то, что устанавливается в: Main-Class: myPrograms.MyClass внутри манифеста jar META-INF/MANIFEST.MF в стороне файла jar.

Ответ 2

Да, это возможно. Вы можете под каждым добавить другой класс с основным методом для того, который выполняет требуемый класс/метод на основе аргумента.

например.

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();
}