Tôi đã tạo một jar thực thi và sử dụng commons-cli để cung cấp cho người dùng khả năng xác định các tham số dòng lệnh khi khởi chạy máy khách. Mọi thứ đều hoạt động tốt. Tuy nhiên, khi tôi in báo cáo sử dụng cho bình, tôi muốn hiển thị thông tin sau:Lấy tên jar thực thi từ bên trong phương thức main()
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
In tất cả các tùy chọn dễ dàng thực hiện với commons-cli. Tuy nhiên, đường "sử dụng" là đầu trầy xước. Tôi dường như không thể tìm ra cách để lấy tên "myprog.jar" từ args [] được chuyển tới ứng dụng.
Có cách nào dễ dàng để thực hiện việc này không? Tôi có thể sử dụng một phương pháp khá phức tạp để trở lại dấu vết từ classloader lớp của tôi và tìm ra nếu nó được chứa trong một cái lọ, nhưng điều đó có vẻ như một câu trả lời khá xấu cho những gì nên là một câu hỏi khá đơn giản.
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;
}
}
đã thử http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
Tôi đã thấy liên kết đó, nhưng có vẻ như nó gần như là "hack". Tôi không thể tin rằng không có một giải pháp trực tiếp hơn. Ngoài ra, API nói rằng "getCodeSource()" có thể trả về null, nhưng không giải thích theo điều kiện nào, vì vậy tôi tự hỏi liệu đây có phải là phương pháp "không an toàn" để sử dụng hay không. –