在运行时选择可运行jar中的主类

我在应用程序中有两个主要类。 当我将它打包到一个可运行的jar(使用Eclipse导出函数)时,我必须选择一个默认的主类。

有没有办法在运行时从jar访问非默认主类?

您可以通过java -cp myapp.jar com.example.Main1java -cp myapp.jar com.example.Main2访问它们。 jar中的默认主类用于通过java -jar myapp.jar调用应用程序时。

有关更多详细信息,请参阅JAR_(file_format) 。 当您在Eclipse中选择主类时,这是设置的内容: Main-Class: myPrograms.MyClass jar文件中jar文件中的Main-Class: myPrograms.MyClass清单META-INF/MANIFEST.MF

是的,这是可能的。 你可以在每个下面添加另一个带有main方法的类,该方法根据参数执行所需的类/方法。

例如

 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块),你可以考虑让它们用void execute()实现一些Action接口,并在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(); }