Fichier .war vs .ear

566

Quelle est la différence entre un fichier .war et .ear?

ria
la source
2
Pour en savoir plus sur .JAR, .WAR and .EARVous pouvez également voir un didacticiel vidéo. C'est très simple ou plus compréhensible. Il expliquera quelle est la différence entre .JAR, .WAR et .EAR Tutoriel vidéo : Différence entre .JAR, .WAR et .EAR
Bharti Rawat
2
Bienvenue dans le monde Java où quelqu'un pensait que laisser un fichier zip avec l'extension .zip n'était pas suffisamment professionnel et qu'il devait donc être renommé en .jar / .ear ou .war en fonction de l'endroit où vous le déplacez éventuellement.
pistacchio

Réponses:

492

De GeekInterview :

Dans l'application J2EE, les modules sont conditionnés en EAR, JAR et WAR en fonction de leurs fonctionnalités

JAR: les modules EJB qui contiennent des beans java d'entreprise (fichiers de classe) et un descripteur de déploiement EJB sont regroupés sous forme de fichiers JAR avec l'extension .jar

WAR: les modules Web qui contiennent des fichiers de classe Servlet, des fichiers JSP, des fichiers de prise en charge, des fichiers GIF et HTML sont fournis sous forme de fichier JAR avec l'extension .war (archive Web)

EAR: tous les fichiers ci-dessus (.jar et .war) sont empaquetés en tant que fichier JAR avec l'extension .ear (archive d'entreprise) et déployés dans Application Server.

elhoim
la source
63
Ce message me fait penser que EAR est juste à la fois JARS et WARS ensemble dans un grand EAR, ce qui, à mon avis, n'est pas si simple.
Lay González
4
Tous sont essentiellement des archives (JAR) mais avec une extension différente pour impliquer leur nature / contenu.
KNU
1
Les fichiers EAR et JAR séparés pour les beans ne sont pas nécessaires dans la plupart des cas. Un simple WAR avec toutes les classes dans une archive est normal. Voici une explication plus élaborée: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics
599

Un WAR (Web Archive) est un module qui est chargé dans un conteneur Web d'un serveur d'applications Java . Un serveur d'applications Java possède deux conteneurs (environnements d'exécution) - l'un est un conteneur Web et l'autre est un conteneur EJB.

Le conteneur Web héberge des applications Web basées sur JSP ou l'API Servlets - conçues spécifiquement pour le traitement des demandes Web - donc plus d'un style de demande / réponse de l'informatique distribuée . Un conteneur Web nécessite que le module Web soit conditionné en tant que fichier WAR - c'est-à-dire un fichier JAR spécial avec un web.xmlfichier dans le WEB-INFdossier.

Un conteneur EJB héberge des beans Java d'entreprise basés sur l'API EJB conçue pour fournir des fonctionnalités métier étendues telles que les transactions déclaratives, la sécurité au niveau des méthodes déclaratives et la prise en charge multiprotocole - donc plus d'un style RPC de l'informatique distribuée . Les conteneurs EJB nécessitent que les modules EJB soient empaquetés sous forme de fichiers JAR - ceux-ci ont un ejb-jar.xmlfichier dans le META-INFdossier.

Les applications d'entreprise peuvent consister en un ou plusieurs modules qui peuvent être des modules Web (empaquetés sous forme de fichier WAR), des modules EJB (empaquetés sous forme de fichier JAR), ou les deux. Les applications d'entreprise sont regroupées sous forme de fichiers EAR - il s'agit de fichiers JAR spéciaux contenant un application.xmlfichier dans le META-INFdossier.

Fondamentalement, les fichiers EAR sont un sur-ensemble contenant des fichiers WAR et des fichiers JAR . Les serveurs d'applications Java permettent le déploiement de modules Web autonomes dans un fichier WAR, bien qu'en interne, ils créent des fichiers EAR comme enveloppe autour des fichiers WAR. Les conteneurs Web autonomes tels que Tomcat et Jetty ne prennent pas en charge les fichiers EAR - ce ne sont pas des serveurs d'applications à part entière. Les applications Web dans ces conteneurs doivent être déployées en tant que fichiers WAR uniquement.

Dans les serveurs d'applications, les fichiers EAR contiennent des configurations telles que le mappage de rôle de sécurité d'application, le mappage de référence EJB et le mappage d'URL racine de contexte des modules Web.

Outre les modules Web et les modules EJB, les fichiers EAR peuvent également contenir des modules de connecteur conditionnés sous forme de fichiers RAR et des modules clients conditionnés sous forme de fichiers JAR.

Rutesh Makhijani
la source
32
+1, car cette réponse explique pourquoi vous pouvez utiliser l'un ou l'autre.
Jason Wheeler
7
@KNU oui, .jar, .waret les .earfichiers sont des archives zip simples, ainsi pu être ouvert par tout programme qui peut gérer les fichiers .zip ordinaires.
acdcjunior
41

guerre - archives web. Il est utilisé pour déployer des applications Web conformément à la norme de servlet. C'est un fichier jar contenant un répertoire spécial appelé WEB-INF et plusieurs fichiers et répertoires à l'intérieur (web.xml, lib, classes) ainsi que tous les HTML, JSP, images, CSS, JavaScript et autres ressources de l'application web

ear - archives d'entreprise. Il est utilisé pour déployer une application d'entreprise contenant des EJB, des applications Web et des bibliothèques tierces. C'est aussi un fichier jar, il a un répertoire spécial appelé APP-INF qui contient le fichier application.xml, et il contient des fichiers jar et war.

David Rabinowitz
la source
vouliez-vous dire META-INF au lieu du répertoire APP-INF?
Zavael
26

Les fichiers WAR (archives Web) contiennent des fichiers de classe de servlet, des JSP (pages de servlet Java), des fichiers HTML et graphiques et d'autres fichiers de prise en charge.

Les fichiers EAR (archive d'entreprise) contiennent les fichiers WAR ainsi que les fichiers JAR contenant le code.

Il peut y avoir d'autres choses dans ces fichiers, mais leur signification est essentiellement celle de leur sonorité: WAR pour les trucs de type Web, EAR pour les trucs de type entreprise (WARs, code, connecteurs et al).

paxdiablo
la source
2
Dans mon cas, je déploie toujours WAR avec des pots dans le dossier WEB-INF / lib et cela fonctionne. Alors pourquoi devrais-je utiliser l'archive EAR?
swapyonubuntu
2
@swapyonubuntu, si vous ne faites que déployer une seule application Web (plus précisément, un seul contexte de servlet), il n'y a rien de mal à simplement faire des fichiers WAR. Les fichiers EAR sont bien meilleurs pour les applications d'entreprise complètes, y compris celles avec de nombreuses applications Web.
paxdiablo
1
À l'ère des microservices, ne serait-il pas plus logique de garder chaque WAR complètement séparé et de le déployer séparément au lieu de les regrouper dans un EAR monolithique?
Sayo Oladeji
18

Fichiers JAR

Un fichier JAR (abréviation de Java Archive) permet la combinaison de plusieurs fichiers en un seul. Fichiers avec le '.jar'; sont utilisées par les développeurs de logiciels pour distribuer des classes Java et diverses métadonnées. Ils contiennent également des bibliothèques et des fichiers de ressources, ainsi que des fichiers accessoires (tels que des fichiers de propriétés).

Les utilisateurs peuvent extraire et créer des fichiers JAR avec la commande '.jar' de Java Development Kit (JDK). Des outils ZIP peuvent également être utilisés.

Les fichiers JAR ont des fichiers manifestes facultatifs. Les entrées dans le fichier manifeste prescrivent l'utilisation du fichier JAR. Une spécification de classe «principale» pour une classe de fichier désigne le fichier comme un programme détaché ou «autonome».

Fichiers WAR

Les fichiers WAR (ou Web Application archive) peuvent comprendre des fichiers XML (extensible Markup Language), des classes Java ainsi que des pages Java Server à des fins d'application Internet. Il est également utilisé pour marquer les bibliothèques et les pages Web qui composent une application Web. Les fichiers portant l'extension «.war» contiennent l'application Web à utiliser avec les conteneurs serveur ou JSP (Java Server Page). Il dispose de JSP, HTML (Hypertext Markup Language), JavaScript et divers fichiers pour créer les applications Web susmentionnées.

Un fichier WAR est structuré comme tel pour permettre des répertoires et des fichiers spéciaux. Il peut également avoir une signature numérique (un peu comme celle d'un fichier JAR) pour montrer la véracité du code.

Fichiers EAR

Un fichier EAR (Enterprise Archive) fusionne les fichiers JAR et WAR en une seule archive. Ces fichiers avec l'extension '.ear' ont un répertoire pour les métadonnées. Les modules sont regroupés dans une archive pour un fonctionnement fluide et simultané des différents modules au sein d'un serveur d'application.

Le fichier EAR possède également des descripteurs de déploiement (qui sont des fichiers XML) qui dictent efficacement le déploiement des différents modules.

entrez la description de l'image ici

Joby Wilson Mathews
la source
1
devrait être la meilleure réponse juste pour l'excellent graphique, merci, grande aide!
fl0w
12

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

tar (archives sur bande) - Le format utilisé est un fichier écrit en unités série de fileName, fileSize, fileData - pas de compression. peut être énorme

Jar (archive java) - techniques de compression utilisées - contient généralement des informations java comme les fichiers classe / java. Mais peut contenir n'importe quel fichier et structure de répertoire

war (archives d'applications Web) - des fichiers jar similaires similaires n'ont qu'une structure de répertoires spécifique selon les spécifications JSP / Servlet à des fins de déploiement

oreille (archives d'entreprise) - similaire à des fichiers jar. ont une structure de répertoires suivant les exigences J2EE afin de pouvoir être déployée sur des serveurs d'applications J2EE. - peut contenir plusieurs fichiers JAR et WAR

simpleDev
la source
6

Les fichiers d'oreille offrent plus d'options pour configurer l'interaction avec le serveur d'applications.

Par exemple: si la version d'hibernation du serveur d'applications est plus ancienne que celle fournie par vos dépendances, vous pouvez ajouter ce qui suit à ear-deployer-jboss-beans.xml pour que JBOSS isole les chargeurs de classe et évite les conflits:

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

ou vers 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> 

Cela garantira qu'il n'y a pas de conflit de chargeur de classe entre votre application et le serveur d'applications.

Normalement, le mécanisme du chargeur de classe fonctionne comme ceci:

Lorsqu'une demande de chargement de classe est présentée à un chargeur de classe, il demande d'abord à son chargeur de classe parent de répondre à la demande. Le parent, à son tour, demande à son parent la classe jusqu'à ce que la demande atteigne le sommet de la hiérarchie. Si le chargeur de classe au sommet de la hiérarchie ne peut pas répondre à la demande, le chargeur de classe enfant qui l'a appelé est responsable du chargement de la classe.

En isolant les chargeurs de classe, votre chargeur de classe d'oreille ne cherchera pas dans le parent (= JBoss / autre chargeur de classe AS). Pour autant que je sache, ce n'est pas possible avec les fichiers de guerre.

marque
la source
KNU: Cette utilisation d'un fichier ear est plus valable que de simplement l'utiliser car "il contient des fichiers de classe Servlet, des fichiers JSP, des fichiers de support, des fichiers GIF et HTML" comme indiqué dans la réponse acceptée. Comme les fichiers de guerre peuvent également contenir des fichiers gif, html, jsp, servlets, ... Si tout le monde "répondait à sa force", nous pourrions peut-être tous devenir plus sages sur le problème en cours.
Mark
Maven fait ça pour toi non? Vous pouvez spécifier des dépendances par version et elles sont incluses dans le dossier / lib. (dans un dossier de guerre)
Sebas
Oui, mais le conteneur serveur / servlet d'application peut choisir de remplacer ceux-ci dans le dossier lib par les lib qu'il fournit dans son propre dossier lib. Cela peut empêcher cela. Tout dépend du mécanisme de chargement de classe utilisé.
Mark
6

J2EE définit trois types d'archives:

  1. Archives Java (JAR) Un fichier JAR encapsule une ou plusieurs classes Java, un manifeste et un descripteur. Les fichiers JAR sont le niveau d'archivage le plus bas. Les fichiers JAR sont utilisés dans J2EE pour empaqueter les EJB et les applications Java côté client.

  2. Archives Web (WAR) Les fichiers WAR sont similaires aux fichiers JAR, sauf qu'ils sont spécifiquement destinés aux applications Web créées à partir de servlets, de JSP et de classes de support.

  3. Archives d'entreprise (EAR) »Un fichier EAR contient tous les composants qui composent une application J2EE particulière.

user1884500
la source
0

Pour faciliter le transport du projet, le déploiement est facilité. besoin d'être compressé en un seul fichier. Groupe JAR (archive java) de fichiers .class

WAR (archive Web) - chaque guerre représente une application Web - utilisez uniquement des technologies liées au Web telles que servlet, jsps peut être utilisé. - peut fonctionner sur le serveur Tomcat - application Web développée par des technologies liées au Web uniquement jsp servlet html js - représentation des informations uniquement pas de transactions.

EAR (archive d'entreprise) - chaque oreille représente une application d'entreprise - nous pouvons utiliser n'importe quoi de j2ee comme ejb, jms peut être utilisé avec plaisir. - peut fonctionner sur Glassfish comme un serveur et non sur un serveur Tomcat. - application d'entreprise développée par n'importe quelle technologie, de j2ee comme toutes les applications Web plus ejbs jms, etc. - effectue des transactions avec la représentation des informations. par exemple. Application bancaire, application télécom

Ashish Kamble
la source