我创建了一个可执行jar并使用commons-cli为用户提供了在启动客户端时指定命令行参数的功能。一切正常。然而,当我打印用法语句罐子,我想显示如下:从main()方法中获取可执行jar名称
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
的所有选项打印很容易用公地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;
}
}
已尝试http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
我确实已经看到该链接,但它看起来好像也几乎是“黑客”。我不相信没有更直接的解决方案。另外,API声明“getCodeSource()”可能返回null,但没有详细说明在哪些条件下,所以我自然想知道这是否是一种“自动防故障”方法。 –