Ho creato un jar eseguibile e utilizzando commons-cli per dare all'utente la possibilità di specificare i parametri della riga di comando all'avvio del client. Tutto funziona bene Tuttavia, quando stampo l'istruzione di utilizzo per il vaso, vorrei mostrare il seguente:Ottieni il nome del jar eseguibile dal metodo main()
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
stampa di tutte le opzioni è fatto facilmente con commons-CLI. Tuttavia, la linea di "utilizzo" è la graffatrice. Non riesco a capire un modo per ottenere il nome "myprog.jar" dagli arg [] che vengono passati all'applicazione.
C'è un modo semplice per farlo? Potrei usare un metodo piuttosto complesso per risalire alla traccia del classloader della mia classe e capire se è contenuto in un jar, ma sembra una risposta abbastanza brutta a quella che dovrebbe essere una domanda piuttosto semplice.
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;
}
}
provato http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
Ho già visto quel link, ma sembrava che fosse quasi un "hack". Non posso credere che non esista una soluzione più diretta. Inoltre, l'API afferma che "getCodeSource()" può restituire null, ma non elaborare in quali condizioni, quindi mi chiedevo naturalmente se questo fosse un metodo "fail-safe" da usare. –