के भीतर निष्पादन योग्य जार का नाम प्राप्त करें मैंने क्लाइंट लॉन्च करते समय उपयोगकर्ता को कमांड लाइन पैरामीटर निर्दिष्ट करने की क्षमता देने के लिए एक निष्पादन योग्य जार बनाया है और कॉमन्स-क्ली का उपयोग किया है। सब कुछ ठीक काम करता है। हालांकि, जब मैं जार के लिए उपयोग विवरण प्रिंट भी, मैं निम्नलिखित दिखाना चाहते हैं:मुख्य() विधि
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
सभी विकल्पों में से मुद्रण आसानी कॉमन्स-CLI साथ किया जाता है। हालांकि, "उपयोग" रेखा सिर स्क्रैचर है। मैं तर्कों से [myprog.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
मैंने पहले से ही उस लिंक को देखा था, लेकिन ऐसा लगता है कि यह लगभग "हैक" भी था। मैं विश्वास नहीं कर सकता कि एक और सीधा समाधान नहीं है। इसके अतिरिक्त, एपीआई का कहना है कि "getCodeSource()" शून्य वापस आ सकता है, लेकिन कौन सी स्थितियों के तहत विस्तृत नहीं करता है, इसलिए मैंने स्वाभाविक रूप से सोचा कि क्या यह उपयोग करने के लिए "असफल-सुरक्षित" विधि थी। –