Tengo un archivo JAR que contiene una aplicación y archivos de configuración para esa aplicación. La aplicación carga archivos de configuración desde classpath (usando ClassLoader.getResource()
), y tiene sus dependencias completamente satisfechas usando los archivos de configuración integrados en el archivo JAR.¿Puedo usar classpath para reemplazar un archivo en un jar que se está ejecutando?
En ocasiones deseo que la aplicación se ejecute con una configuración ligeramente diferente (específicamente quiero anular la URL JDBC para apuntar a una base de datos diferente) así que creo un nuevo archivo de configuración, almacénelo en la estructura de directorios correcta (lo que significa que en un directorio /config
de una entrada de ruta de clase), y quiero hacer algo como esto:
java -cp new-config:. -jar application.jar
Pero no puede obtener la ruta de clase para tener la entrada new-config
camino ante el contenido del JAR aplicación. ¿Está codificado que el contenido del JAR sea siempre lo primero en el classpath?
¿Usted ha intentado poner la configuración fuera de frasco, en su propio archivo jar en una ruta relativa a application.jar (../conf/config.jar)? Si lo haces, creo que puedes establecer la ruta de clases que apunta a ese archivo de configuración en el manifiesto de la aplicación y puedes establecer la nueva configuración cambiando config.jar. Ojalá tuviera más tiempo para hacer una demostración para confirmar mi respuesta, pero no puedo ... así que lo escribí como un comentario – JuanZe
¿Quieres decir, en lugar de dentro del JAR? – Guss
sí, en lugar de dentro del mismo contenedor que la aplicación, poner la configuración dentro de un segundo contenedor ... – JuanZe