Ich habe eine ausführbare jar erstellt und mit commons-cli dem Benutzer die Möglichkeit zu geben, Kommandozeilen-Parameter angeben, wenn er den Client startet. Alles funktioniert gut. Allerdings, wenn ich die Verwendungsaussage für das Glas drucken, würde Ich mag folgend zeigen:Namen ausführbarer jar Get aus main() Methode
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
Druck von allen Optionen ist leicht getan mit commons-cli. Die Zeile "Usage" ist jedoch der Head Scratcher. Ich kann anscheinend keinen Weg finden, den "myprog.jar" Namen von den args [] zu erhalten, die an die Anwendung übergeben werden.
Gibt es eine einfache Möglichkeit, dies zu tun? Ich könnte ein ziemlich verworren Methode trace aus meiner Klasse Klassenlader zu sichern und herauszufinden, ob es in einem Gefäß enthalten ist, aber das scheint wie eine ziemlich hässliche Antwort auf das, was sollte eine ziemlich einfache Frage sein.
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;
}
}
versucht http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
Ich habe diesen Link schon gesehen, aber es sah so aus, als wäre es fast ein "Hack". Ich kann nicht glauben, dass es keine direktere Lösung gibt. Außerdem gibt die API an, dass "getCodeSource()" möglicherweise null zurückgibt, aber unter welchen Bedingungen nicht, daher fragte ich mich natürlich, ob dies eine "ausfallsichere" Methode ist. –