我在应用程序中有两个主要类。当我使用Eclipse导出功能将其打包成可运行的jar文件时,我必须选择一个默认的主类。
是否有一种方法可以在运行时访问jar文件中的非默认主类?
我在应用程序中有两个主要类。当我使用Eclipse导出功能将其打包成可运行的jar文件时,我必须选择一个默认的主类。
是否有一种方法可以在运行时访问jar文件中的非默认主类?
您可以通过 java -cp myapp.jar com.example.Main1
和 java -cp myapp.jar com.example.Main2
两种方式访问。当您通过 java -jar myapp.jar
命令调用应用程序时,JAR包中的默认主类将会被执行。
详细信息请参阅JAR_(file_format)。在Eclipse中选择主类时,会在JAR清单文件 META-INF/MANIFEST.MF
中设置 Main-Class: myPrograms.MyClass
。
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();
}
}
void execute()
的Action
接口,并在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();
}