Archivo .war vs .ear

566

¿Cuál es la diferencia entre un archivo .war y .ear?

ria
fuente
2
Para entender más acerca de .JAR, .WAR and .EARUsted también puede ver un video tutorial. Es muy simple o más comprensible. Explicará cuál es la diferencia entre .JAR, .WAR y .EAR Video Tutorial : Diferencia entre .JAR, .WAR y .EAR
Bharti Rawat
2
Bienvenido al mundo de Java, donde alguien pensó que dejar un archivo zip con la extensión .zip no es lo suficientemente empresarial y, por lo tanto, debe cambiarse su nombre a .jar / .ear o .war según el lugar donde eventualmente lo mueva.
pistacho el

Respuestas:

492

De GeekInterview :

En la aplicación J2EE, los módulos se empaquetan como EAR, JAR y WAR según su funcionalidad

JAR: Los módulos EJB que contienen Enterprise Java Beans (archivos de clase) y el descriptor de implementación EJB se empaquetan como archivos JAR con extensión .jar

WAR: los módulos web que contienen archivos de clase Servlet, archivos JSP, archivos de soporte, archivos GIF y HTML se empaquetan como un archivo JAR con extensión .war (archivo web)

EAR: todos los archivos anteriores (.jar y .war) se empaquetan como un archivo JAR con extensión .ear (archivo empresarial) y se implementan en Application Server.

elhoim
fuente
63
Esta publicación me hace pensar que EAR es solo JARS y WARS juntos en un gran EAR, lo que creo que no es tan simple.
Lay González
44
En esencia, todos son Archivo (JAR) pero con diferente extensión para implicar su naturaleza / contenido.
KNU
1
Los EAR y JAR separados para beans son innecesarios en la mayoría de los casos. Una WAR simple con todas las clases en un archivo es normal. Aquí hay una explicación más elaborada: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics
599

Un WAR (Web Archive) es un módulo que se carga en un contenedor web de un servidor de aplicaciones Java . Un servidor de aplicaciones Java tiene dos contenedores (entornos de tiempo de ejecución): uno es un contenedor web y el otro es un contenedor EJB.

El contenedor web aloja aplicaciones web basadas en JSP o la API de Servlets, diseñadas específicamente para el manejo de solicitudes web, por lo que es más un estilo de solicitud / respuesta de computación distribuida . Un contenedor web requiere que el módulo web se empaquete como un archivo WAR , que es un archivo JAR especial con un web.xmlarchivo en la WEB-INFcarpeta.

Un contenedor EJB aloja Enterprise Java Beans basado en la API EJB diseñada para proporcionar una funcionalidad comercial extendida como transacciones declarativas, seguridad de nivel de método declarativo y soporte multiprotocolo, por lo que es más un estilo RPC de computación distribuida . Los contenedores EJB requieren que los módulos EJB se empaqueten como archivos JAR ; estos tienen un ejb-jar.xmlarchivo en la META-INFcarpeta.

Las aplicaciones empresariales pueden consistir en uno o más módulos que pueden ser módulos web (empaquetados como un archivo WAR), módulos EJB (empaquetados como un archivo JAR) o ambos. Las aplicaciones empresariales se empaquetan como archivos EAR ; estos son archivos JAR especiales que contienen un application.xmlarchivo en la META-INFcarpeta.

Básicamente, los archivos EAR son un superconjunto que contiene archivos WAR y archivos JAR . Los servidores de aplicaciones Java permiten la implementación de módulos web independientes en un archivo WAR, aunque internamente, crean archivos EAR como envoltorio alrededor de los archivos WAR. Los contenedores web independientes como Tomcat y Jetty no admiten archivos EAR; estos no son servidores de aplicaciones completos. Las aplicaciones web en estos contenedores deben implementarse solo como archivos WAR.

En los servidores de aplicaciones, los archivos EAR contienen configuraciones como la asignación de roles de seguridad de la aplicación, la asignación de referencia EJB y la asignación de URL raíz de contexto de los módulos web.

Además de los módulos web y los módulos EJB, los archivos EAR también pueden contener módulos de conector empaquetados como archivos RAR y módulos de cliente empaquetados como archivos JAR.

Rutesh Makhijani
fuente
32
+1 porque esta respuesta describe por qué es posible que desee utilizar uno u otro.
Jason Wheeler
77
@KNU sí, .jar, .wary .earlos archivos son archivos zip simples, por lo tanto capaz de ser abierto por cualquier programa que pueda manejar archivos .zip ordinarios.
acdcjunior
41

guerra - archivo web. Se utiliza para implementar aplicaciones web de acuerdo con el estándar de servlet. Es un archivo jar que contiene un directorio especial llamado WEB-INF y varios archivos y directorios dentro de él (web.xml, lib, clases), así como todos los HTML, JSP, imágenes, CSS, JavaScript y otros recursos de la aplicación web.

ear - archivo empresarial. Se utiliza para implementar aplicaciones empresariales que contienen EJB, aplicaciones web y bibliotecas de terceros. También es un archivo jar, tiene un directorio especial llamado APP-INF que contiene el archivo application.xml y contiene archivos jar y war.

David Rabinowitz
fuente
¿quiso decir META-INF en lugar del directorio APP-INF?
Zavael
26

Los archivos WAR (archivo web) contienen archivos de clase de servlet, JSP (páginas de servlet de Java), archivos HTML y gráficos, y otros archivos de soporte.

Los archivos EAR (archivo empresarial) contienen los archivos WAR junto con los archivos JAR que contienen el código.

Puede haber otras cosas en esos archivos, pero básicamente están destinados a lo que parecen: WAR para cosas de tipo web, EAR para cosas de tipo empresarial (WAR, código, conectores, etc.).

paxdiablo
fuente
2
En mi caso, siempre implemento WAR con frascos en la carpeta WEB-INF / lib y eso funciona. Entonces, ¿por qué debería usar el archivo EAR?
swapyonubuntu
2
@swapyonubuntu, si solo está implementando una sola aplicación web (más específicamente, un solo contexto de servlet), no hay nada de malo en simplemente hacer archivos WAR. Los archivos EAR son mucho mejores para aplicaciones empresariales completas, incluidas aquellas con muchas aplicaciones web.
paxdiablo
1
En esta era de microservicios, ¿no tendría más sentido mantener cada WAR completamente separada y desplegarla por separado en lugar de agruparlas en un EAR monolítico?
Sayo Oladeji
18

Archivos JAR

Un archivo JAR (abreviatura de Java Archive) permite la combinación de varios archivos en uno solo. Archivos con el '.jar'; Los desarrolladores de software utilizan la extensión para distribuir clases Java y varios metadatos. Estos también contienen bibliotecas y archivos de recursos, así como archivos accesorios (como archivos de propiedades).

Los usuarios pueden extraer y crear archivos JAR con el comando '.jar' de Java Development Kit (JDK). También se pueden usar herramientas ZIP.

Los archivos JAR tienen archivos de manifiesto opcionales. Las entradas dentro del archivo de manifiesto prescriben el uso del archivo JAR. Una especificación de clase 'principal' para una clase de archivo denota el archivo como un programa separado o 'independiente'.

Archivos WAR

Los archivos WAR (o archivo de aplicación web) pueden comprender archivos XML (Lenguaje de marcado extensible), clases de Java, así como páginas de Java Server para fines de aplicación de Internet. También se utiliza para marcar bibliotecas y páginas web que componen una aplicación web. Los archivos con la extensión '.war' contienen la aplicación web para usar con servidores o contenedores JSP (Java Server Page). Tiene JSP, HTML (Lenguaje de marcado de hipertexto), JavaScript y varios archivos para crear las aplicaciones web antes mencionadas.

Un archivo WAR está estructurado como tal para permitir directorios y archivos especiales. También puede tener una firma digital (muy parecida a la de un archivo JAR) para mostrar la veracidad del código.

Archivos EAR

Un archivo EAR (Enterprise Archive) combina archivos JAR y WAR en un solo archivo. Estos archivos con la extensión '.ear' tienen un directorio para metadatos. Los módulos se empaquetan en un archivo para un funcionamiento fluido y simultáneo de los diferentes módulos dentro de un servidor de aplicaciones.

El archivo EAR también tiene descriptores de implementación (que son archivos XML) que dictan efectivamente la implementación de los diferentes módulos.

ingrese la descripción de la imagen aquí

Joby Wilson Mathews
fuente
1
debe ser la mejor respuesta solo por el excelente gráfico, gracias, ¡gran ayuda!
fl0w
12

Consulte: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

tar (archivos de cinta): el formato utilizado es un archivo escrito en unidades seriales de fileName, fileSize, fileData: sin compresión. puede ser enorme

Jar (archivo java) - técnicas de compresión utilizadas - generalmente contiene información java como archivos de clase / java. Pero puede contener cualquier archivo y estructura de directorios

war (archivos de aplicaciones web): similares a los archivos jar solo tienen una estructura de directorio específica según las especificaciones JSP / Servlet para fines de implementación

ear (archivos empresariales): similar a los archivos jar. tener una estructura de directorio que siga los requisitos de J2EE para que pueda implementarse en servidores de aplicaciones J2EE - puede contener múltiples archivos JAR y WAR

simpleDev
fuente
6

Los archivos Ear proporcionan más opciones para configurar la interacción con el servidor de aplicaciones.

Por ejemplo: si la versión de hibernación del servidor de aplicaciones es anterior a la proporcionada por sus dependencias, puede agregar lo siguiente a ear-deployer-jboss-beans.xml para JBOSS para aislar cargadores de clases y evitar conflictos:

<bean name="EARClassLoaderDeployer" class="org.jboss.deployment.EarClassLoaderDeployer">    
  <property name="isolated">true</property>
</bean>

o a src / main / application / META-INF / jboss-app.xml:

<?xml version="1.0"?>
<jboss-app>
<loader-repository>
    loader=nameofyourear.ear
<loader-repository-config>java2ParentDelegation=false</loader-repository-config>
</loader-repository>
</jboss-app> 

Esto asegurará que no haya conflictos de carga de clases entre su aplicación y el servidor de aplicaciones.

Normalmente, el mecanismo del cargador de clases funciona así:

Cuando se presenta una solicitud de carga de clase a un cargador de clases, primero le pide a su cargador de clases padre que cumpla con la solicitud. El padre, a su vez, le pregunta a su padre la clase hasta que la solicitud llegue a la parte superior de la jerarquía. Si el cargador de clases en la parte superior de la jerarquía no puede cumplir con la solicitud, entonces el cargador de clases secundario que lo llamó es responsable de cargar la clase.

Al aislar los cargadores de clases, su cargador de clases ear no se verá en el padre (= JBoss / otro cargador de clases AS). Hasta donde sé, esto no es posible con los archivos de guerra.

marca
fuente
KNU: Este uso de un archivo ear es más válido que solo usarlo porque "contiene archivos de clase Servlet, archivos JSP, archivos de soporte, archivos GIF y HTML" como se indica en la respuesta aceptada. Como los archivos de guerra también pueden contener gif, html, jsp, servlets, ... Si todos "respondieran a su fuerza", tal vez todos podríamos ser más sabios sobre el tema en cuestión.
Mark
Maven hace eso por ti no? Puede especificar dependencias por versión y se incluyen en la carpeta / lib. (en un archivo de guerra)
Sebas
Sí, pero el servidor de aplicaciones / contenedor de servlet puede optar por anularlos en la carpeta lib con las libs que proporciona en su propia carpeta lib. Esto puede evitar eso. Todo depende del mecanismo de carga de clases utilizado.
Mark
6

J2EE define tres tipos de archivos:

  1. Archivos Java (JAR) Un archivo JAR encapsula una o más clases Java, un manifiesto y un descriptor. Los archivos JAR son el nivel más bajo de archivo. Los archivos JAR se utilizan en J2EE para empaquetar EJB y aplicaciones Java del lado del cliente.

  2. Archivos web (WAR) Los archivos WAR son similares a los archivos JAR, excepto que son específicamente para aplicaciones web hechas de Servlets, JSP y clases de soporte.

  3. Enterprise Archives (EAR) : un archivo EAR contiene todos los componentes que conforman una aplicación J2EE particular.

usuario1884500
fuente
0

Para hacer que el proyecto sea transportado, la implementación es fácil. necesita comprimirse en un solo archivo. Grupo JAR (archivo java) de archivos .class

WAR (archivo web): cada guerra representa una aplicación web: use solo tecnologías relacionadas con la web como servlet, se pueden usar jsps. - puede ejecutarse en el servidor Tomcat - aplicación web desarrollada por tecnologías relacionadas con la web solo jsp servlet html js - representación de información solo sin transacciones.

EAR (archivo empresarial): cada oído representa una aplicación empresarial. Podemos usar cualquier cosa, desde j2ee como ejb, jms se puede usar felizmente. - puede ejecutarse en Glassfish como servidor, no en el servidor Tomcat. - aplicación empresarial desarrollada por cualquier tecnología, desde j2ee como todas las aplicaciones web más ejbs jms, etc. - realiza transacciones con representación de información. p.ej. Aplicación de banco, aplicación de telecomunicaciones

Ashish Kamble
fuente