我在从一个JAR文件中运行多个不同的类时遇到问题.我知道我可以将JAR中的一个类设置为将在命令后运行的Main类java -jar myjar.jar,但我想要的是:
java -jar myjar.jar MyClass
Run Code Online (Sandbox Code Playgroud)
是否有可能以这种方式执行此操作,或者我是否必须创建多个JAR(每个用于一个可运行的类),或者更好地创建将运行我的其他类传递给命令行参数的"manager"类?
我正在寻找文档或参考,但我找不到任何.
igg*_*ran 70
可执行的Jar文件格式仅允许您指定一个主类.为了能够执行不同的应用程序,您需要按照建议创建"管理器",或者使用类路径:
java -cp myjar.jar MyClass
Run Code Online (Sandbox Code Playgroud)
但是,此方法将忽略您在Jar的清单文件中配置的类路径.
Gar*_*vis 13
你将不得不使用:
java -cp myjar.jar MyClass
Run Code Online (Sandbox Code Playgroud)
和
java -cp myjar.jar OtherMainClass
Run Code Online (Sandbox Code Playgroud)
小智 5
使用“Launcher”主类(其功能只是将调用分派到实际的控制器类)并使用链接文件作为最终包装器,而不是摆弄 -cp 选项,不是会更好吗?嗯?
在 Windows 中,这样做非常容易。
“主类”不需要太复杂,比如
/**
* Sample launcher
*/
public class Launcher {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
if (args != null && args.length > 0) {
String option= args[0];
String[] args2=new String[0];
if( args.length>1){
args2= new String[args.length-1];
System.arraycopy(args, 1, args2, 0, args2.length);
}
if(option.equals("a")) {
new ClassA().exec(args2);
}
else if(option.equals("b")){
new ClassB().exec(args2);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Windows 方面,创建此类链接就足够了
javaw.exe -jar "jarfile" "a"
Run Code Online (Sandbox Code Playgroud)
它对于将链接放置在“sendTo”文件夹中非常有用...一个隐藏的 jar,由激活其某一方面的许多链接调用,使得部署 jar 逻辑的更新变得更简单。
所选的实际文件作为链接定义中的参数后面的字符串列表传递。
这样,您就不必担心整个类路径问题。