我創建了一個可執行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,但沒有詳細說明在哪些條件下,所以我自然想知道這是否是一種「自動防故障」方法。 –