我创建了一个可执行 jar 并使用 commons-cli 让用户能够在启动客户端时指定命令行参数。一切正常。但是,当我打印 jar 的使用说明时,我想显示以下内容:
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
使用 commons-cli 可以轻松打印所有选项。但是,“使用”行是头疼的。我似乎无法找到从传递给应用程序的 args[] 中获取“myprog.jar”名称的方法。
有什么简单的方法可以做到这一点吗?我可以使用一种非常复杂的方法从我的类的类加载器中进行回溯,并确定它是否包含在一个 jar 中,但这对于应该是一个非常简单的问题来说似乎是一个相当丑陋的答案。
private String getPath(Class cls) {
String cn = cls.getName();
String rn = cn.replace('.', '/') + ".class";
String path =
getClass().getClassLoader().getResource(rn).getPath();
int ix = path.indexOf("!");
if(ix >= 0) {
return path.substring(0, ix);
} else {
return path;
}
}