2012-09-25 14 views
23

Cómo editar un archivo de propiedades (como application.properties) en el interior de un archivo JAR existente en un servidor Linux remoto.Como editar el contenido de un application.properties o application.yml archivo dentro de un frasco existente en un servidor Linux remoto

Imagínese el frasco se encuentra en /home/user/my-spring-boot.jar y me gusta cambiar el nombre de usuario en el interior de application.propertires de

username=foo 

a

username=bar 

¿Cómo abrir el archivo y cambie la propiedad?

Respuesta

48

Un archivo .jar es simplemente un archivo .zip con una extensión diferente, y vim pueden editar archivos zip y sus contenidos directamente! Simplemente vim su .jar, use el navegador de archivos para encontrar su archivo de propiedades y cámbielo. vim mantendrá el zip con sus ediciones.

Ver here para más detalles.

+0

parece muy conveniente, pero me da una "precaución: nombre de archivo no coincide" error después de seleccionando un archivo en el navegador –

+3

¡Qué bueno que encontré esta respuesta! vim es lo mejor desde vi –

+0

No creo que este sea el enfoque correcto para "anular" las propiedades incluidas en un contenedor. Una mejor manera es pasar la propiedad usando -Dusername = bar o mediante la variable env al iniciar la aplicación Spring Boot – ootero

2

ruta posible podría ser que copiar el frasco en un archivo zip, extraer, cambiar sus propiedades, comprimir a zip y cambiar el nombre a sacudir

cp myJar.jar myJar.zip 
unzip myJar.zip 
vim myProperties.properties (doing the change here) 
zip allMyFiles into myJar.zip 
cp myJar.zip myModifiedJar.jar 
0

Puede descomprimir archivos jar con el comando jar xf bigExecutableJar.jar. Si puede, le sugiero que instale atool porque ofrece una mejor línea de comandos para empacar/descomprimir archivos.

A menos que sepa cómo manejar vi, use nano como editor. Algunos sistemas también tienen instalado mc que es un explorador de archivos basado en consola que tiene un editor incorporado.

Después de cambiar el archivo, puede empaquetar el archivo de nuevo utilizando jar cf bigExecutableJar-new.jar -C . (o atool --add)

Si realmente quiere/necesidad de utilizar jar, sugiero probar el comando en un nuevo directorio en primer lugar porque a veces doesn te comportas como lo esperas ¡Nunca lo use en el archivo original!

1

Use emacs para editar contenido en archivo jar

emacs jarfile 

Después de abrir el frasco, se puede navegar por las carpetas y archivos. Busque en jdbc.properties y edítelo. Luego guarde los cambios con c-x c-s.

Nota: Es necesario instalar zip y descomprimir

1

Puede hacerlo con emacs (después de haber copiado el archivo de copia de seguridad):

$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
$ emacs /home/user/bigExecutableJar.jar 
  • Si es grande, se le preguntará si realmente quieres abrir el archivo.
  • Luego puede buscar el archivo que desea modificar en el búfer listando todos los archivos en el contenedor; use C-s para hacer una búsqueda si es necesario.
  • Abra el archivo seleccionándolo y presione RET.
  • Realice los cambios y guarde con C-x C-s.
  • Finalmente cierre Emacs con C-x C-c.
1

Cambiar un artefacto JAR existente no es una buena idea. En cambio, Spring Boot le permite anular fácilmente las propiedades incluidas con valores externos de varias maneras.

Por ejemplo, puede colocar un archivo application.properties junto al JAR con los valores que desea sobrescribir. Ni siquiera necesita copiar todo el archivo de propiedades allí, solo las propiedades que desea cambiar, porque aún recae en los valores predeterminados incluidos.

Los detalles se documentan aquí:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

-1
sed -i "s/\(customAuthHeaderName=\).*\$/\1${customAuthHeaderName}/" configuration.properties 

sed -i "s/\(logoutPage=\).*\$/\1${logoutPage}/" configuration.properties 

Segundo valor customAuthHeaderName proviene de archivo de propiedades

+0

Debe proporcionar alguna explicación adicional –

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la crítica] (/ review/low-quality-posts/18600327) – Keshav

Cuestiones relacionadas