在运行时在可运行的 jar 中选择主类
2022-09-01 12:55:47
我在应用程序中有两个主要类。当我将其打包到一个可运行的jar(使用Eclipse导出功能)时,我必须选择一个默认的主类。
有没有办法在运行时从jar访问非默认主类?
我在应用程序中有两个主要类。当我将其打包到一个可运行的jar(使用Eclipse导出功能)时,我必须选择一个默认的主类。
有没有办法在运行时从jar访问非默认主类?
您可以通过 和 访问。jar 中的默认 main 类用于通过 调用应用时。java -cp myapp.jar com.example.Main1
java -cp myapp.jar com.example.Main2
java -jar myapp.jar
有关详细信息,请参阅JAR_(file_format)。当你在 Eclipse 中选择主类时,这就是设置的内容:jar 清单内部,位于 jar 文件的一侧。Main-Class: myPrograms.MyClass
META-INF/MANIFEST.MF
是的,这是可能的。您可以在每个类下添加另一个类,其中包含一个主方法,该方法根据参数执行所需的类/方法。
例如:
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块),你可以考虑让它们用 a 实现一些接口,并在 :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();
}