I have two main classes in the app. When I package it to a runnable jar (using Eclipse export function) I have to select a default main class.
Is there a way to acce
Yes, it's possible. You can under each add another class with a main method for that which executes the desired class/method based on the argument.
E.g.
public static void main(String... args) {
if ("foo".equals(args[0])) {
Foo.main(args);
} else if ("bar".equals(args[0])) {
Bar.main(args);
}
}
(don't forget to add the obvious checks yourself such as args.length and so on)
Which you can use as follows:
java -jar YourJar.jar foo
If well designed, this can however make the main() method of the other classes superfluous. E.g.
public static void main(String... args) {
if ("foo".equals(args[0])) {
new Foo().execute();
} else if ("bar".equals(args[0])) {
new Bar().execute();
}
}
To abstract this more (to get rid of if/else blocks), you could consider to let them implement some Action interface with a void execute() and get hold of them in a Map:
private static Map actions = new HashMap();
static {
actions.put("foo", new Foo());
actions.put("bar", new Bar());
}
public static void main(String... args) {
actions.get(args[0]).execute();
}