rsplit
должно соответствовать задаче:
In [1]: 'http://www.test.com/page/TEST2'.rsplit('/', 1)[1]
Out[1]: 'TEST2'
Вы можете получить доступ как через 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-файла.
Да, это возможно. Под каждым можно добавить еще один класс с основным методом для того, который выполняет требуемый класс / метод на основе аргумента.
, например,
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();
}