Brian Jackson - Fotolia
¿Cuáles son las diferencias entre los archivos EAR, JAR y WAR?
Los archivos JAR, WAR y EAR proporcionan opciones en la implementación de una aplicación Java. Comparemos estos tipos de archivos y determinemos cuál es el adecuado para cada entorno.
Cuando se implementan aplicaciones Java, todos los archivos que constituyen la aplicación Java se comprimen y empaquetan en un solo archivo. Si bien los archivos comprimidos suelen tener una extensión .zip, la comunidad Java utiliza la extensión .ear para aplicaciones empresariales basadas en Java EE, .war para aplicaciones web y .jar para aplicaciones Java independientes y bibliotecas vinculables.
Pero, bajo las cubiertas, los archivos EAR, JAR y WAR son simplemente archivos zip que contienen varias imágenes, archivos XML, archivos de propiedades y partes de código Java que forman una aplicación Java. Si la extensión .ear, .war o .jar de cualquiera de estos archivos se cambia a .zip, se puede abrir con cualquier herramienta de descompresión estándar, incluidas 7-Zip o WinRAR. Exploremos las diferencias entre los archivos JAR, WAR y EAR.
¿Por qué usar archivos EAR, JAR y WAR?
Incluso las aplicaciones Java más simples pueden estar compuestas por 10 o 20 archivos Java independientes. Las aplicaciones empresariales complejas pueden contener miles de archivos. Es posible facilitar el desarrollo de software con muchos archivos con responsabilidades específicas, pero esto complica la implementación de la aplicación.
Pero se puede simplificar este proceso cuando se mueven aplicaciones entre entornos, se vinculan en tiempo de ejecución, se mueven a través de redes y se almacenan en repositorios de Maven cuando se empaquetan aplicaciones multiparte como un único archivo comprimido. A pesar de las diferencias entre los archivos JAR, WAR y EAR, todos pueden ayudar a simplificar el tiempo de implementación de la aplicación Java.
Cómo crear archivos EAR, JAR y WAR
Dado que los archivos WAR, JAR y EAR utilizan un algoritmo de compresión estándar, se pueden crear con cualquier herramienta de compresión estándar. Sin embargo, el JDK viene con una utilidad especial llamada jar.exe, que empaqueta y comprime las aplicaciones web, empresariales y Java en su tipo correspondiente.
También hay una serie de herramientas DevOps populares que empaquetarán automáticamente aplicaciones como archivos EAR, JAR y WAR como parte de un flujo de trabajo de CI. Por ejemplo, la conclusión de una tubería de Jenkins es a menudo una llamada a una herramienta de compilación como Ant, Maven o Gradle para empaquetar la aplicación probada en el archivo apropiado.
Diferencias entre archivos EAR y WAR
La mayor diferencia entre los archivos JAR, WAR y EAR es el hecho de que están dirigidos a diferentes entornos. Un archivo EAR requiere un servidor de aplicaciones totalmente compatible con la plataforma Java, Enterprise Edition (Java EE) o Jakarta Enterprise Edition (EE), como WebSphere o JBoss, para ejecutarse. Un archivo WAR solo requiere un servidor de aplicaciones compatible con Java EE Web Profile para ejecutarse, y un archivo JAR solo requiere una instalación Java.
También hay restricciones y requisitos internos que se aplican a los archivos EAR, WAR y JAR. Los archivos EAR deben tener un archivo application.xml contenido dentro de una carpeta llamada META-INF. Un archivo WAR requiere un archivo web.xml contenido en una carpeta WEB-INF. Los archivos Java no tienen ninguno de estos requisitos.
JAR contra EJB-JAR
La especificación Java EE también define un tipo especial de archivo JAR que contiene solo Enterprise JavaBeans (EJB). Este archivo tiene una extensión .jar pero contiene un descriptor de despliegue especial y está destinado a aislar componentes EJB de otras partes de la aplicación empresarial. La especificación Java EE también define un archivo de adaptador de recursos, que contiene código que une una aplicación empresarial a servicios externos, como colas de mensajes y bases de datos. Estos archivos tienen una extensión .rar.
Microservicios y archivos JAR
La tendencia actual en la industria del desarrollo de software es hacia el desarrollo de microservicios y lejos de las aplicaciones monolíticas. Como tal, ha habido un alejamiento del desarrollo y la implementación de aplicaciones empresariales implementadas como archivos EAR y un movimiento hacia la creación de componentes más pequeños que se implementan como archivos JAR.
Los marcos de microservicios modernos, como Spring Boot y Eclipse MicroProfile, implementan aplicaciones como archivos JAR ejecutables que se pueden implementar directamente en un contenedor de software, como Docker, y en una herramienta de orquestación de contenedores, como RedHat OpenShift.