.war vs .ear Datei


566

Was ist der Unterschied zwischen einer .war- und einer .ear-Datei?


2
Um mehr darüber zu .JAR, .WAR and .EARerfahren, können Sie auch ein Video-Tutorial sehen. Es ist sehr einfach oder verständlicher. Es wird erklärt, was der Unterschied zwischen .JAR, .WAR und .EAR Video Tutorial ist : Unterschied zwischen .JAR, .WAR und .EAR
Bharti Rawat

2
Willkommen in der Java-Welt, in der jemand der Meinung war, dass das Verlassen einer Zip-Datei mit der Erweiterung .zip nicht unternehmerisch genug ist und daher in .jar / .ear oder .war umbenannt werden muss, je nachdem, wohin Sie sie letztendlich verschieben.
Pistacchio

Antworten:


492

Von GeekInterview :

In der J2EE-Anwendung werden Module basierend auf ihrer Funktionalität als EAR, JAR und WAR gepackt

JAR: EJB-Module, die Enterprise-Java-Beans (Klassendateien) und den EJB-Bereitstellungsdeskriptor enthalten, werden als JAR-Dateien mit der Erweiterung .jar gepackt

WAR: Webmodule, die Servlet-Klassendateien, JSP-Dateien, unterstützende Dateien, GIF- und HTML-Dateien enthalten, werden als JAR-Datei mit der Erweiterung .war (Webarchiv) gepackt

EAR: Alle oben genannten Dateien (.jar und .war) werden als JAR-Datei mit der Erweiterung .ear (Unternehmensarchiv) gepackt und auf Application Server bereitgestellt.


63
Dieser Beitrag lässt mich denken, dass EAR nur JARS und WARS zusammen in einem großen EAR sind, was meiner Meinung nach nicht so einfach ist.
Lay González

4
Alle sind im Wesentlichen Archive (JAR), jedoch mit unterschiedlicher Erweiterung, um ihre Art / ihren Inhalt zu implizieren.
KNU

1
EARs und separate JARs für Bohnen sind in den meisten Fällen nicht erforderlich. Ein einfacher WAR mit allen Klassen in einem Archiv ist normal. Hier ist eine ausführlichere Erklärung: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

Ein WAR (Web Archive) ist ein Modul, das in einen Webcontainer eines Java Application Server geladen wird . Ein Java Application Server verfügt über zwei Container (Laufzeitumgebungen) - einer ist ein Webcontainer und der andere ist ein EJB-Container.

Der Webcontainer hostet Webanwendungen, die auf JSP oder der Servlets-API basieren und speziell für die Bearbeitung von Webanfragen entwickelt wurden . Für einen Webcontainer muss das Webmodul als WAR-Datei gepackt sein - das ist eine spezielle JAR-Datei mit einer web.xmlDatei im WEB-INFOrdner.

In einem EJB-Container werden Enterprise-Java-Beans gehostet, die auf der EJB-API basieren und erweiterte Geschäftsfunktionen wie deklarative Transaktionen, Sicherheit auf deklarativer Methodenebene und Multiprotokollunterstützung bieten - also eher ein RPC-Stil für verteiltes Computing . Für EJB-Container müssen EJB-Module als JAR-Dateien gepackt werden. Diese enthalten eine ejb-jar.xmlDatei im META-INFOrdner.

Unternehmensanwendungen können aus einem oder mehreren Modulen bestehen, die entweder Webmodule (als WAR-Datei gepackt), EJB-Module (als JAR-Datei verpackt) oder beide sein können. Unternehmensanwendungen werden als EAR-Dateien gepackt. Hierbei handelt es sich um spezielle JAR-Dateien, die eine application.xmlDatei im META-INFOrdner enthalten.

Grundsätzlich sind EAR-Dateien eine Obermenge, die WAR-Dateien und JAR-Dateien enthält . Java Application Server ermöglichen die Bereitstellung eigenständiger Webmodule in einer WAR-Datei. Intern erstellen sie jedoch EAR-Dateien als Wrapper für WAR-Dateien. Standalone-Webcontainer wie Tomcat und Jetty unterstützen keine EAR-Dateien - dies sind keine vollwertigen Anwendungsserver. Webanwendungen in diesen Containern dürfen nur als WAR-Dateien bereitgestellt werden.

Auf Anwendungsservern enthalten EAR-Dateien Konfigurationen wie die Zuordnung von Anwendungssicherheitsrollen, die EJB-Referenzzuordnung und die Kontextstamm-URL-Zuordnung von Webmodulen.

Neben Webmodulen und EJB-Modulen können EAR-Dateien auch Connector-Module enthalten, die als RAR-Dateien und Client-Module als JAR-Dateien gepackt sind.


32
+1, weil diese Antwort beschreibt, warum Sie das eine oder andere verwenden möchten.
Jason Wheeler

7
@KNU ja .jar, .warund .earDateien sind einfache Zip - Archive, damit in der Lage von jedem Programm geöffnet werden , die gewöhnlichen ZIP - Dateien verarbeiten kann.
Acdcjunior

41

Kriegs - Webarchiv. Es wird zum Bereitstellen von Webanwendungen gemäß dem Servlet-Standard verwendet. Es handelt sich um eine JAR-Datei, die ein spezielles Verzeichnis namens WEB-INF und mehrere darin enthaltene Dateien und Verzeichnisse (web.xml, lib, classes) sowie alle HTML-, JSP-, Bild-, CSS-, JavaScript- und anderen Ressourcen der Webanwendung enthält

Ohr - Unternehmensarchiv. Es wird zum Bereitstellen von Unternehmensanwendungen verwendet, die EJBs, Webanwendungen und Bibliotheken von Drittanbietern enthalten. Es ist auch eine JAR-Datei, es hat ein spezielles Verzeichnis namens APP-INF, das die Datei application.xml enthält, und es enthält JAR- und War-Dateien.


Meinten Sie META-INF anstelle des APP-INF-Verzeichnisses?
Zavael

26

WAR-Dateien (Webarchivdateien) enthalten Servlet-Klassendateien, JSPs (Java-Servlet-Seiten), HTML- und Grafikdateien sowie andere unterstützende Dateien.

EAR-Dateien (Enterprise Archive) enthalten die WAR-Dateien zusammen mit den JAR-Dateien, die Code enthalten.

Es mag andere Dinge in diesen Dateien geben, aber sie sind im Grunde genommen für das gedacht, wie sie klingen: WAR für Sachen vom Typ Web, EAR für Sachen vom Typ Enterprise (WARs, Code, Konnektoren usw.).


2
In meinem Fall stelle ich WAR immer mit Jars im Ordner WEB-INF / lib bereit und das funktioniert. Warum sollte ich das EAR-Archiv verwenden?
Swapyonubuntu

2
@swapyonubuntu: Wenn Sie nur eine einzelne Webanwendung bereitstellen (genauer gesagt einen einzelnen Servlet-Kontext), ist nichts falsch daran, nur WAR-Dateien zu erstellen. EAR-Dateien eignen sich viel besser für vollständige Unternehmensanwendungen, einschließlich solcher mit vielen Web-Apps.
Paxdiablo

1
Wäre es in Zeiten von Microservices nicht sinnvoller, jedes WAR vollständig getrennt zu halten und separat bereitzustellen, anstatt sie zu einer monolithischen EAR zusammenzufassen?
Sayo Oladeji

18

JAR-Dateien

Eine JAR-Datei (kurz für Java Archive) ermöglicht die Kombination mehrerer Dateien zu einer einzigen. Dateien mit der '.jar'; Erweiterungen werden von Softwareentwicklern verwendet, um Java-Klassen und verschiedene Metadaten zu verteilen. Diese enthalten auch Bibliotheken und Ressourcendateien sowie Zubehördateien (z. B. Eigenschaftendateien).

Benutzer können JAR-Dateien mit dem Befehl '.jar' des Java Development Kit (JDK) extrahieren und erstellen. Es können auch ZIP-Tools verwendet werden.

JAR-Dateien haben optionale Manifestdateien. Einträge in der Manifestdatei schreiben die Verwendung der JAR-Datei vor. Eine 'Haupt'-Klassenspezifikation für eine Dateiklasse bezeichnet die Datei als getrenntes oder' eigenständiges 'Programm.

WAR-Dateien

WAR-Dateien (oder Webanwendungsarchivdateien) können XML-Dateien (Extensible Markup Language), Java-Klassen sowie Java Server-Seiten für Zwecke der Internetanwendung umfassen. Es wird auch verwendet, um Bibliotheken und Webseiten zu markieren, aus denen eine Webanwendung besteht. Dateien mit der Erweiterung '.war' enthalten die Webanwendung zur Verwendung mit Server- oder JSP-Containern (Java Server Page). Es verfügt über JSP, HTML (Hypertext Markup Language), JavaScript und verschiedene Dateien zum Erstellen der oben genannten Web-Apps.

Eine WAR-Datei ist so strukturiert, dass spezielle Verzeichnisse und Dateien möglich sind. Es kann auch eine digitale Signatur haben (ähnlich der einer JAR-Datei), um die Richtigkeit des Codes anzuzeigen.

EAR-Dateien

Eine EAR-Datei (Enterprise Archive) führt JAR- und WAR-Dateien zu einem einzigen Archiv zusammen. Diese Dateien mit der Erweiterung '.ear' haben ein Verzeichnis für Metadaten. Die Module werden in ein Archiv gepackt, um einen reibungslosen und gleichzeitigen Betrieb der verschiedenen Module innerhalb eines App-Servers zu gewährleisten.

Die EAR-Datei enthält auch Bereitstellungsdeskriptoren (XML-Dateien), die die Bereitstellung der verschiedenen Module effektiv vorschreiben.

Geben Sie hier die Bildbeschreibung ein


1
sollte die beste Antwort sein, nur für die exzellente Grafik, danke, tolle Hilfe!
fl0w

12

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

tar (Bandarchive) - Das verwendete Format ist eine Datei, die in seriellen Einheiten von Dateiname, Dateigröße, Dateidaten geschrieben ist - keine Komprimierung. kann riesig sein

Jar (Java-Archiv) - verwendete Komprimierungstechniken - enthält im Allgemeinen Java-Informationen wie Klassen- / Java-Dateien. Kann aber beliebige Dateien und Verzeichnisstrukturen enthalten

war (Webanwendungsarchive) - ähnlich wie JAR-Dateien haben sie nur eine bestimmte Verzeichnisstruktur gemäß JSP / Servlet-Spezifikation für Bereitstellungszwecke

ear (Unternehmensarchive) - ähnlich wie JAR-Dateien. Die Verzeichnisstruktur entspricht den J2EE-Anforderungen, sodass sie auf J2EE-Anwendungsservern bereitgestellt werden kann. - kann mehrere JAR- und WAR-Dateien enthalten


6

Ear-Dateien bieten weitere Optionen zum Konfigurieren der Interaktion mit dem Anwendungsserver.

Beispiel: Wenn die Ruhezustandsversion des Anwendungsservers älter ist als die von Ihren Abhängigkeiten bereitgestellte, können Sie ear-deployer-jboss-beans.xml für JBOSS Folgendes hinzufügen, um Klassenladeprogramme zu isolieren und Konflikte zu vermeiden:

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

oder zu 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> 

Dadurch wird sichergestellt, dass zwischen Ihrer Anwendung und dem Anwendungsserver kein Klassenladekonflikt besteht.

Normalerweise funktioniert der Classloader-Mechanismus folgendermaßen:

Wenn eine Klassenladeanforderung einem Klassenladeprogramm präsentiert wird, fordert es zuerst seinen übergeordneten Klassenladeprogramm auf, die Anforderung zu erfüllen. Das übergeordnete Element fragt sein übergeordnetes Element nach der Klasse, bis die Anforderung den oberen Rand der Hierarchie erreicht. Wenn der Klassenlader oben in der Hierarchie die Anforderung nicht erfüllen kann, ist der untergeordnete Klassenlader, der ihn aufgerufen hat, für das Laden der Klasse verantwortlich.

Durch das Isolieren der Klassenlader sieht Ihr Ohrklassenlader nicht im übergeordneten (= JBoss / anderer AS-Klassenlader) aus. Soweit ich weiß, ist dies mit Kriegsakten nicht möglich.


KNU: Diese Verwendung einer Ear-Datei ist mehr gültig als nur die Verwendung, da "sie Servlet-Klassendateien, JSP-Dateien, unterstützende Dateien, GIF- und HTML-Dateien enthält", wie in der akzeptierten Antwort angegeben. Da Kriegsdateien auch GIF, HTML, JSP, Servlets usw. enthalten können, könnten wir alle klüger werden, wenn jeder "mit seiner Stärke antwortet".
Mark

Maven macht das für dich nein? Sie können Abhängigkeiten pro Version angeben, die in den Ordner / lib aufgenommen werden. (in einer Kriegsakte)
Sebas

Ja, aber der Anwendungsserver / Servlet-Container kann diese im lib-Ordner mit den libs überschreiben, die er in seinem eigenen lib-Ordner bereitstellt. Dies kann dies verhindern. Es hängt alles vom verwendeten Klassenlademechanismus ab.
Mark

6

J2EE definiert drei Arten von Archiven:

  1. Java-Archive (JAR) Eine JAR-Datei enthält eine oder mehrere Java-Klassen, ein Manifest und einen Deskriptor. JAR-Dateien sind die unterste Archivierungsstufe. JAR-Dateien werden in J2EE zum Packen von EJBs und clientseitigen Java-Anwendungen verwendet.

  2. WAR-Dateien für Webarchive (WAR) ähneln JAR-Dateien, sind jedoch speziell für Webanwendungen vorgesehen, die aus Servlets, JSPs und unterstützenden Klassen bestehen.

  3. Enterprise Archives (EAR) “Eine EAR-Datei enthält alle Komponenten, aus denen eine bestimmte J2EE-Anwendung besteht.


0

Um den Projekttransport zu vereinfachen, wurde die Bereitstellung vereinfacht. müssen in eine Datei komprimiert werden. JAR-Gruppe (Java-Archiv) von .class-Dateien

WAR (Webarchiv) - jeder Krieg stellt eine Webanwendung dar - es können nur webbezogene Technologien wie Servlet und JSP verwendet werden. - kann auf Tomcat-Server ausgeführt werden - Web-App nur von webbezogenen Technologien entwickelt jsp servlet html js - Info-Darstellung nur keine Transaktionen.

EAR (Enterprise Archive) - jedes Ohr repräsentiert eine Unternehmensanwendung - wir können alles von j2ee wie ejb verwenden, jms kann gerne verwendet werden. - Kann auf einem Glassfish-ähnlichen Server ausgeführt werden, nicht auf einem Tomcat-Server. - Unternehmens-App, die von jeder Technologie von j2ee entwickelt wurde, wie alle Web-Apps plus ejbs jms usw. - führt Transaktionen mit Info-Darstellung durch. z.B. Bank App, Telekom App

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.