Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=da5f9925-1ce3-41c9-9783-ae8f48ce3ccd

En qué se diferencia un archivo .jar de uno .war en Java

Cuando creas una aplicación Java, hasta la más sencilla, sueles terminar con unos cuantos archivos .java con el código de tus clases además de otros archivos de recursos y auxiliares que forman parte de la aplicación. Si la aplicación es grande, podemos estar hablando de cientos o miles de archivos. Si tú o tu equipo sois ordenados, podéis (y debéis) organizarlas de manera que sean fácilmente identificables y "encontrables". Pero aun así, a la hora de distribuir la aplicación, moverla entre entornos, almacenarla en repositorios Maven... tener todos esos archivos así "sueltos", no es lo más conveniente.

Es por este motivo que la plataforma Java ofrece la capacidad de empaquetar las aplicaciones en un único archivo que facilita su gestión. Existen diversas formas de empaquetar las aplicaciones Java, pero las dos más comunes son en forma de archivos con las extensiones .jar y .war, que se denominan respectivamente archivos JAR (Java ARchive) y archivos WAR (Web Application Resource).

Se trata de archivos comprimidos con el archiconocido formato ZIP, por lo que podemos abrirlos e incluso crearlos con cualquier compresor común. Pero Java tiene una herramienta específica para gestionarlos: jar.exe que se encarga de crear el archivo con la estructura y los contenidos adecuados.

También existen muchas otras herramientas que crean este tipo de archivos de manera automática, como por ejemplo las herramientas de build como Maven, Ant o Gradle.

Archivos JAR de Java

Un archivo .jar es un archivo comprimido que contiene una estructura de archivos .class (tus clases compiladas), las librerías y los recursos que necesita tu aplicación para funcionar. Además, contendrá metadatos con información sobre sus contenidos, como por ejemplo cuál es la clase principal que se usará para ejecutar la aplicación.

Se empaqueta en este formato para distribuirla de manera sencilla y cómoda.

La siguiente animación muestra los contenidos de un archivo JAR de una aplicación real, abierto con el gestor de archivos comprimidos 7-ZIP en mi equipo:

Animación que muestra algunas carpeta de un archivo .jar

Como ves, contiene una carpeta META-INF con un archivo llamado MANIFEST.MF. Este es el que contiene los metadatos de la aplicación, con cuestiones como los datos del desarrollador, su versión, el iniciador de la aplicación o los paquetes de los que depende y que se deben importar (este es de una conocida aplicación de escritorio para chats y telefonía, Jitsi Desktop):

El contenido del MANIFEST.MF

Además, contiene tantas carpetas como extensiones de paquetes Java existan. Es decir, por ejemplo, si tenemos una clase Java que pertenece al paquete com.miempresa.utils, existirá una carpeta de primer nivel com, dentro de esta otra llamada miempresa y a su vez otra llamada utils, con las clases compiladas y otros recursos de ese paquete, tal y como se ve en la animación anterior.

Los archivos .jar se pueden ejecutar desde la línea de comandos usando el modificador -jar de Java, así:

java -jar miAplicacion.jar

Archivos WAR de Java

Los archivos WAR son unos tipos de JAR especiales para empaquetar aplicaciones Web. También tienen el manifiesto para los metadatos, pero la estructura interna es diferente. Disponen de una carpeta llamada WEB-INF que contiene los archivos de la aplicación Web (aunque algunos pueden estar en la raíz también) y un archivo web.xml con información sobre la misma y con cuestiones como, qué URLs se corresponden con qué elementos de código, las dependencias o ciertas variables entre otras cosas. Si solo hay archivos .jsp, podemos prescindir de ese archivo XML.

Un ejemplo de estructura típico podría ser:

META-INF/
  |___ MANIFEST.MF
WEB-INF/
  |___ web.xml
  |___ jsp/
        |___ holamundo.jsp
  |___ classes/
  		|___ application.properties
        |___ *.class  //Archivos de clases
        |___ lib/
              |___ *.jar //Otros archivos .jar de librerías
index.html
hola.jsp

Pudiendo incluir también archivos de imágenes, JavaScript, CSS, vídeos... y todo lo que la aplicación Web necesite.

Como vemos, por tanto, la primera diferencia con los archivos JAR es que la estructura de los archivos WAR es muy diferente a la de estos.

Además, al ser archivos específicos para aplicaciones Web, no los podemos ejecutar desde la línea de comandos como los .jar, sino que necesitaremos utilizar un servidor de aplicaciones, como Tomcat, JBoss o Weblogic, para ejecutar la aplicación.

Para construirlo se usa también jar.exe y lo pueden producir las mismas herramientas de build también, eso sí.

José Manuel Alarcón Fundador de campusMVP, es ingeniero industrial y especialista en consultoría de empresa. Ha escrito diversos libros, habiendo publicado hasta la fecha cientos de artículos sobre informática e ingeniería en publicaciones especializadas. Microsoft lo ha reconocido como MVP (Most Valuable Professional) en desarrollo web desde el año 2004 hasta la actualidad. Puedes seguirlo en Twitter en @jm_alarcon o leer sus blog técnico o personal. Ver todos los posts de José Manuel Alarcón
Archivado en: Lenguajes y plataformas

¿Te ha gustado este post?
Pues espera a ver nuestro boletín mensual...

Suscríbete a la newsletter

La mejor formación online para desarrolladores como tú

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.