我创建了一个可执行的jar包,并使用commons-cli来让用户在启动客户端时指定命令行参数。一切都正常。但是,当我打印出该jar包的用法说明时,我希望显示以下内容:
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
使用commons-cli可以轻松地打印出所有选项。然而,“usage”行是让人伤透脑筋的。我似乎找不到获取传递给应用程序的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;
}
}