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

rsplit должно соответствовать задаче:

In [1]: 'http://www.test.com/page/TEST2'.rsplit('/', 1)[1]
Out[1]: 'TEST2'

29
задан Tomasz 7 January 2010 в 20:43
поделиться

2 ответа

Вы можете получить доступ как через 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-файла.

44
ответ дан 28 November 2019 в 01:33
поделиться

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

, например,

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();
}
8
ответ дан BalusC 14 October 2019 в 08:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: