Tarde o temprano hay que entregar como .war una aplicación que está desplegada en modo exploded: para promoverla a otro entorno, para archivarla o simplemente porque el destino no admite despliegues expandidos. No hace falta reconstruir el proyecto ni recurrir a Maven o Ant: el propio JDK trae la herramienta que lo resuelve en un comando.
Cuándo aplica
Escenarios validados:
- Oracle WebLogic Server 11.1.x o superior.
- JDK 1.7 o superior.
- Cualquier plataforma soportada por el producto.
Qué es un deployment exploded
Es el modo de despliegue en el que los ficheros de la aplicación no se empaquetan en formato WAR o EAR, sino que quedan expandidos como un árbol de directorios en disco. Se usa para permitir modificaciones en caliente durante el desarrollo, o porque alguna funcionalidad del application server lo requiere.
1. Revisar el contenido del directorio
Antes de empaquetar, comprueba que la estructura está completa: los descriptores en WEB-INF, el META-INF y los recursos estáticos. En el ejemplo se usa una aplicación de demo llamada InMemRepClient:
$ ls -R
InMemRepClient
./InMemRepClient:
META-INF Session.jsp WEB-INF images
./InMemRepClient/META-INF:
MANIFEST.MF
./InMemRepClient/WEB-INF:
web.xml weblogic.xml
./InMemRepClient/images:
logo_tm_onwt.jpg2. Empaquetar el contenido en un WAR
Sitúate dentro del directorio de la aplicación —no en el directorio padre— y lanza el comando. Este detalle importa: si lo ejecutas un nivel por encima, el WAR quedará con una carpeta contenedora de más y el servidor no encontrará WEB-INF al desplegarlo.
$ jar cvf InMemRepClient.war *Qué hace cada opción:
c— crea un archivo nuevo.v— genera salida verbose por stdout/stderr mientras empaqueta.f— indica que el resultado se escribe en el fichero cuyo nombre viene a continuación.*— incluye todo el contenido del directorio actual.
La salida detalla fichero a fichero lo que se va añadiendo y su ratio de compresión:
added manifest
ignoring entry META-INF/
ignoring entry META-INF/MANIFEST.MF
adding: Session.jsp(in = 7802) (out= 2480)(deflated 68%)
adding: WEB-INF/(in = 0) (out= 0)(stored 0%)
adding: WEB-INF/web.xml(in = 338) (out= 169)(deflated 50%)
adding: WEB-INF/weblogic.xml(in = 237) (out= 151)(deflated 36%)
adding: images/(in = 0) (out= 0)(stored 0%)
adding: images/logo_tm_onwt.jpg(in = 22884) (out= 21128)(deflated 7%)Resultado
Ya tienes el .war listo para desplegar en el servidor de destino.
Un detalle de la salida que suele generar dudas: las líneas ignoring entry META-INF/ no son un error. La herramienta genera su propio manifest —de ahí el added manifest de la primera línea— y por eso descarta el MANIFEST.MF que ya existía en el directorio. Si necesitas conservar el original, empaqueta con la opción m indicando el fichero: jar cvfm InMemRepClient.war META-INF/MANIFEST.MF *.
