Vamos a ver los pasos necesarios para extraer el contenido de un archivo JAR, modificar su contenido y después volver a empaquetarlo.
Extraer el contenido de un archivo JAR
El comando «jar» (Java Archive Tool) permite manipular los archivos jar. En el caso de OpenJDK está disponible en las versiones «devel» del paquete (p.ej java-1.7.0-openjdk-devel).
Para extraer el contenido de un jar utilizaremos los parámetros «xfv» seguidos del jar a desempaquetar.
-x extract named (or all) files from archive -v generate verbose output on standard output -f specify archive file name
Ejemplo:
# jar xfv catalina.jar created: META-INF/ inflated: META-INF/MANIFEST.MF created: org/ created: org/apache/ created: org/apache/catalina/ inflated: org/apache/catalina/LifecycleEvent.class inflated: org/apache/catalina/Manager.class inflated: org/apache/catalina/Group.class inflated: org/apache/catalina/Server.class created: org/apache/catalina/realm/ inflated: org/apache/catalina/realm/GenericPrincipal.class inflated: org/apache/catalina/realm/Constants.class inflated: org/apache/catalina/realm/LocalStrings.properties [...]
Una vez desempaquetado podemos crear nuevos archivos y directorios, modificar los desempaquetados, etc.
Empaquetar o crear un archivo JAR
Una vez que hemos terminado de manipular el contenido del jar debemos volver a empaquetarlo, para ello utilizamos los parámetros cfv:
-c create new archive -v generate verbose output on standard output -f specify archive file name
Ejemplo:
# jar cfv catalina2.jar jar/* added manifest adding: jar/META-INF/(in = 0) (out= 0)(stored 0%) adding: jar/META-INF/MANIFEST.MF(in = 68) (out= 67)(deflated 1%) adding: jar/org/(in = 0) (out= 0)(stored 0%) adding: jar/org/apache/(in = 0) (out= 0)(stored 0%) adding: jar/org/apache/catalina/(in = 0) (out= 0)(stored 0%) adding: jar/org/apache/catalina/LifecycleEvent.class(in = 1101) (out= 494)(deflated 55%) adding: jar/org/apache/catalina/Manager.class(in = 1469) (out= 627)(deflated 57%) adding: jar/org/apache/catalina/Group.class(in = 563) (out= 313)(deflated 44%) adding: jar/org/apache/catalina/Server.class(in = 762) (out= 360)(deflated 52%) adding: jar/org/apache/catalina/realm/(in = 0) (out= 0)(stored 0%) adding: jar/org/apache/catalina/realm/GenericPrincipal.class(in = 2816) (out= 1239)(deflated 56%) adding: jar/org/apache/catalina/realm/Constants.class(in = 644) (out= 394)(deflated 38%) [...]