Sí, es posible. Bajo cada una puede agregar otra clase con un método principal para el que ejecuta la clase/método deseado en función del argumento.
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);
}
}
(no se olvide de añadir los controles obvios a sí mismo como args.length
y así sucesivamente)
que se puede utilizar de la siguiente manera:
java -jar YourJar.jar foo
Si bien diseñado, sin embargo, esto puede hacer que el método main()
de las otras clases sea superfluo. P.ej.
public static void main(String... args) {
if ("foo".equals(args[0])) {
new Foo().execute();
} else if ("bar".equals(args[0])) {
new Bar().execute();
}
}
Para abstracto esto más (para deshacerse de if/else bloques), que podrían considerar la posibilidad de dejar a poner en práctica alguna de las interfaces Action
con un void execute()
y conseguir de ellos en un 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();
}
Esto no funcionará con la exportación de Eclipse Runnable ya que delegan la carga en un cargador de clases personalizado. –
Esto no funciona si tiene el atributo de ruta de clase –