Volver al blog
Oracle 3 min de lectura

Cómo crear un archivo WAR desde un deployment exploded

Una aplicación desplegada en modo exploded se empaqueta como .war con una sola herramienta del JDK. El comando, qué hace cada opción y el detalle del directorio que arruina el despliegue si se pasa por alto.

Portada de la guía para crear un archivo WAR desde un deployment exploded en Oracle WebLogic

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.jpg

2. 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 *.