java - org - Obtenga el nombre del jar ejecutable desde el método main()
java parse arguments (2)
Aqui tienes:
new java.io.File(SomeClassInYourJar.class.getProtectionDomain()
.getCodeSource()
.getLocation()
.getPath())
.getName()
Edit: vi tu comentario sobre getSourceCode API. Bueno, esto es probablemente lo mejor que puedes hacer en Java. Acerca de getCodeSource()
devuelve un null
, creo que ocurre principalmente en las clases en java.lang.*
Y otras clases especiales para las cuales la ubicación de origen está "oculta". Debería trabajar para tus propias clases sin embargo.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo obtener la ruta de un archivo JAR en ejecución? 29 respuestas
He creado un jar 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, cuando imprimo la declaración de uso para el jar, me gustaría mostrar lo siguiente:
usage: java -jar myprog.jar <options> <file>
--help Display the help message
--debug Enable debugging
....
La impresión de todas las opciones se realiza fácilmente con commons-cli. Sin embargo, la línea de "uso" es el rascador de cabeza. Parece que no puedo encontrar una 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 realizar un seguimiento del rastreo de clases de mi clase y averiguar si está contenido dentro de un frasco, pero eso parece una respuesta bastante fea a 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;
}
}
En cualquier caso, debe agregar un .toURI () antes de llamar a getPath (). Esto se debe a algunas peculiaridades en la implementación de la URL de java: vea cómo codificar la URL para evitar caracteres especiales en java para obtener más detalles.