Creé un archivo ejecutable y uso commons-cli para dar al usuario la capacidad de especificar parámetros de línea de comandos cuando inicia el cliente. Todo funciona bien Sin embargo, al imprimir la descripción de uso del frasco, me gustaría mostrar lo siguiente:Obtener el nombre del archivo ejecutable desde el método main()
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
impresión de todas las opciones se hace fácilmente con Commons-CLI. Sin embargo, la línea de "uso" es el rascador de la cabeza. Parece que no puedo encontrar la manera de obtener el nombre "myprog.jar" de los argumentos [] que se pasan a la aplicación.
¿Hay alguna manera fácil de hacer esto? Podría usar un método bastante intrincado para rastrear desde el cargador de clases de mi clase y descubrir si está contenido dentro de un contenedor, pero eso parece una respuesta bastante fea para lo que debería ser una pregunta bastante simple.
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;
}
}
intentado http://stackoverflow.com/questions/320542/how-to-get-the-path-of-a-running-jar-file?lq=1? – Charles
Ya vi ese enlace, pero parecía como si fuera casi un "truco" también. No puedo creer que no haya una solución más directa. Además, la API establece que "getCodeSource()" puede devolver nulo, pero no detalla bajo qué condiciones, por lo que naturalmente me pregunté si este era un método "a prueba de fallas" para usar. –