.war vs .ear file


566

Qual è la differenza tra un file .war e .ear?


2
Per saperne di più su .JAR, .WAR and .EARPuoi anche vedere un video tutorial. È molto semplice o più comprensibile. Spiegherà qual è la differenza tra .JAR, .WAR e .EAR Tutorial video : differenza tra .JAR, .WAR e .EAR
Bharti Rawat,

2
Benvenuti nel mondo Java dove qualcuno pensava che lasciare un file zip con l'estensione .zip non fosse abbastanza intraprendente e quindi deve essere rinominato in .jar / .ear o .war in base a dove lo si sta spostando.
pistacchio,

Risposte:


492

Da GeekInterview :

Nell'applicazione J2EE, i moduli sono impacchettati come EAR, JAR e WAR in base alla loro funzionalità

JAR: i moduli EJB che contengono java bean enterprise (file di classe) e il descrittore di distribuzione EJB sono compressi come file JAR con estensione .jar

WAR: I moduli Web che contengono file di classe Servlet, file JSP, file di supporto, file GIF e HTML sono impacchettati come file JAR con estensione .war (archivio web)

EAR: tutti i file sopra (.jar e .war) sono impacchettati come file JAR con estensione .ear (archivio aziendale) e distribuiti in Application Server.


63
Questo post mi fa pensare che EAR sia solo JARS e WARS insieme in una grande EAR, che penso non sia così semplice.
Lay González,

4
Tutti in sostanza sono Archive (JAR) ma con diverse estensioni per implicare la loro natura / contenuto.
KNU,

1
Nella maggior parte dei casi non sono necessarie EAR e JAR separati per i bean. Una semplice GUERRA con tutte le classi in un archivio è normale. Ecco una spiegazione più elaborata: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics,

599

Un WAR (Web Archive) è un modulo che viene caricato in un contenitore Web di un Java Application Server . Un Java Application Server ha due contenitori (ambienti di runtime): uno è un contenitore Web e l'altro è un contenitore EJB.

Il contenitore Web ospita applicazioni Web basate su JSP o l'API Servlet - progettata specificamente per la gestione delle richieste Web - quindi più di uno stile di richiesta / risposta di elaborazione distribuita . Un contenitore Web richiede che il modulo Web sia impacchettato come file WAR , ovvero un file JAR speciale con un web.xmlfile nella WEB-INFcartella.

Un contenitore EJB ospita bean Java Enterprise basati sull'API EJB progettata per fornire funzionalità aziendali estese come transazioni dichiarative, sicurezza a livello di metodo dichiarativo e supporto multiprotocollo, quindi più di uno stile RPC di elaborazione distribuita . I contenitori EJB richiedono che i moduli EJB siano impacchettati come file JAR : questi hanno un ejb-jar.xmlfile nella META-INFcartella.

Le applicazioni aziendali possono essere costituite da uno o più moduli che possono essere moduli Web (impacchettati come file WAR), moduli EJB (impacchettati come file JAR) o entrambi. Le applicazioni aziendali sono impacchettate come file EAR : si tratta di file JAR speciali contenenti un application.xmlfile nella META-INFcartella.

Fondamentalmente, i file EAR sono un superset contenente file WAR e file JAR . Java Application Server consente la distribuzione di moduli Web autonomi in un file WAR, sebbene internamente creino file EAR come wrapper per i file WAR. I contenitori Web autonomi come Tomcat e Jetty non supportano i file EAR: non si tratta di server delle applicazioni completi. Le applicazioni Web in questi contenitori devono essere distribuite solo come file WAR.

Nei server delle applicazioni, i file EAR contengono configurazioni come la mappatura dei ruoli di sicurezza delle applicazioni, la mappatura di riferimento EJB e la mappatura dell'URL di root di contesto dei moduli Web.

Oltre ai moduli Web e ai moduli EJB, i file EAR possono contenere anche moduli connettore impacchettati come file RAR e moduli client impacchettati come file JAR.


32
+1 perché questa risposta descrive perché potresti voler usare l'uno o l'altro.
Jason Wheeler

7
@KNU sì, .jar, .warei .earfile sono semplici archivi zip, quindi in grado di essere aperto da qualsiasi programma in grado di gestire i file .zip ordinarie.
acdcjunior,

41

guerra - archivio web. Viene utilizzato per distribuire applicazioni Web secondo lo standard servlet. È un file jar contenente una directory speciale denominata WEB-INF e diversi file e directory al suo interno (web.xml, lib, classi) oltre a tutto l'HTML, JSP, immagini, CSS, JavaScript e altre risorse dell'applicazione Web

orecchio - archivio aziendale. Viene utilizzato per distribuire applicazioni enterprise contenenti EJB, applicazioni Web e librerie di terze parti. È anche un file jar, ha una directory speciale chiamata APP-INF che contiene il file application.xml e contiene file jar e war.


intendevi META-INF invece della directory APP-INF?
Zavael

26

I file WAR (archivio web) contengono file di classe servlet, JSP (pagine servlet Java), file HTML e grafici e altri file di supporto.

I file EAR (archivio aziendale) contengono i file WAR insieme ai file JAR contenenti codice.

Potrebbero esserci altre cose in quei file, ma sostanzialmente significano per quello che sembrano significare: WAR per roba di tipo web, EAR per roba di tipo aziendale (WAR, codice, connettori e altri).


2
Nel mio caso ho sempre distribuito WAR con vasetti nella cartella WEB-INF / lib e funziona. Quindi perché dovrei usare l'archivio EAR?
Swapyonubuntu,

2
@swapyonubuntu, se stai solo distribuendo una singola applicazione web (più specificamente, un singolo contesto servlet), non c'è niente di sbagliato nel fare semplicemente file WAR. I file EAR sono molto migliori per le app aziendali complete, comprese quelle con molte app Web.
paxdiablo,

1
In questa era di microservizi, non avrebbe più senso mantenere ogni GUERRA completamente separata e distribuirla separatamente invece di raggrupparli in un EAR monolitico?
Sayo Oladeji,

18

File JAR

Un file JAR (abbreviazione di Java Archive) consente la combinazione di più file in uno solo. File con ".jar"; le estensioni sono utilizzate dagli sviluppatori software per distribuire classi Java e vari metadati. Questi contengono anche librerie e file di risorse, nonché file accessori (come i file delle proprietà).

Gli utenti possono estrarre e creare file JAR con il comando '.jar' di Java Development Kit (JDK). È inoltre possibile utilizzare gli strumenti ZIP.

I file JAR hanno file manifest opzionali. Le voci all'interno del file manifest prescrivono l'uso del file JAR. Una specifica di classe "principale" per una classe di file indica il file come programma distaccato o "autonomo".

File WAR

I file WAR (o Web Application Archive) possono comprendere file XML (extensible Markup Language), classi Java e pagine Server Java ai fini dell'applicazione Internet. Viene inoltre utilizzato per contrassegnare librerie e pagine Web che compongono un'applicazione Web. I file con estensione ".war" contengono l'app Web da utilizzare con i contenitori server o JSP (pagina server Java). Dispone di JSP, HTML (Hypertext Markup Language), JavaScript e vari file per la creazione delle suddette app Web.

Un file WAR è strutturato come tale per consentire directory e file speciali. Potrebbe anche avere una firma digitale (molto simile a quella di un file JAR) per mostrare la veridicità del codice.

File EAR

Un file EAR (Enterprise Archive) unisce i file JAR e WAR in un singolo archivio. Questi file con l'estensione '.ear' hanno una directory per i metadati. I moduli sono impacchettati in archivio per un funzionamento regolare e simultaneo dei diversi moduli all'interno di un server app.

Il file EAR ha anche descrittori di distribuzione (che sono file XML) che determinano efficacemente la distribuzione dei diversi moduli.

inserisci qui la descrizione dell'immagine


1
dovrebbe essere la risposta migliore solo per l'eccellente grafica, grazie, grande aiuto!
fl0w,

12

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

tar (archivi su nastro) - Il formato utilizzato è il file scritto in unità seriali di fileName, fileSize, fileData - nessuna compressione. può essere enorme

Jar (archivio java) - tecniche di compressione utilizzate - generalmente contiene informazioni java come file di classe / java. Ma può contenere qualsiasi file e struttura di directory

war (archivi di applicazioni web) - simili come i file jar hanno solo una struttura di directory specifica secondo le specifiche JSP / Servlet ai fini della distribuzione

orecchio (archivi aziendali) - simile ai file jar. avere una struttura di directory in base ai requisiti J2EE in modo che possa essere distribuita su server applicazioni J2EE. - può contenere più file JAR e WAR


6

I file ear offrono più opzioni per configurare l'interazione con il server delle applicazioni.

Ad esempio: se la versione ibernata del server delle applicazioni è precedente a quella fornita dalle dipendenze, è possibile aggiungere quanto segue a ear-deployer-jboss-beans.xml per JBOSS per isolare i classloader ed evitare conflitti:

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

oppure 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> 

Ciò assicurerà che non vi siano conflitti tra classloader tra l'applicazione e il server delle applicazioni.

Normalmente il meccanismo classloader funziona in questo modo:

Quando una richiesta di caricamento della classe viene presentata a un programma di caricamento classi, per prima cosa chiede al proprio programma di caricamento classi padre di soddisfare la richiesta. Il genitore, a sua volta, chiede al genitore la classe fino a quando la richiesta non raggiunge la cima della gerarchia. Se il caricatore di classi nella parte superiore della gerarchia non è in grado di soddisfare la richiesta, il caricatore di classi figlio che lo ha chiamato è responsabile del caricamento della classe.

Isolando i classloader, il classloader dell'orecchio non verrà visualizzato nel genitore (= JBoss / altro classloader AS). Per quanto ne so, questo non è possibile con i file di guerra.


KNU: Questo uso di un file ear è più valido del semplice utilizzo perché "contiene file di classe Servlet, file JSP, file di supporto, file GIF e HTML" come indicato nella risposta accettata. Dato che i file di guerra possono contenere anche gif, html, jsp, servlet, ... Se tutti "rispondessero alla sua forza", forse tutti potremmo diventare più saggi sul problema in questione.
Segna il

Maven lo fa per te no? È possibile specificare le dipendenze per versione e vengono incluse nella cartella / lib. (in un dossier di guerra)
Sebas

Sì, ma il server delle applicazioni / contenitore servlet può scegliere di sovrascriverli nella cartella lib con le librerie che fornisce nella propria cartella lib. Questo può impedirlo. Tutto dipende dal meccanismo di caricamento delle classi utilizzato.
Mark

6

J2EE definisce tre tipi di archivi:

  1. Java Archives (JAR) Un file JAR incapsula una o più classi Java, un manifest e un descrittore. I file JAR sono il livello più basso di archivio. I file JAR vengono utilizzati in J2EE per il packaging di bean e applicazioni Java lato client.

  2. I file WAR degli archivi Web (WAR) sono simili ai file JAR, ad eccezione del fatto che sono specifici per le applicazioni Web create da servlet, JSP e classi di supporto.

  3. Enterprise Archives (EAR) ”Un file EAR contiene tutti i componenti che compongono una particolare applicazione J2EE.


0

Per facilitare il trasporto del progetto, la distribuzione è stata semplificata. è necessario comprimere in un file. JAR (archivio Java) gruppo di file .class

WAR (archivio web) - ogni guerra rappresenta un'applicazione web - usa solo tecnologie legate al web come servlet, jsps può essere usato. - può essere eseguito su server Tomcat - app Web sviluppata solo con tecnologie web jsp servlet html js - rappresentazione delle informazioni solo nessuna transazione.

EAR (archivio aziendale) - ogni orecchio rappresenta un'applicazione aziendale - possiamo usare qualsiasi cosa da j2ee come ejb, jms può essere felicemente usato. - può essere eseguito su Glassfish come server non su server Tomcat. - l'app enterprise sviluppata da qualsiasi tecnologia da j2ee come tutte le app web più ejbs jms ecc. - esegue transazioni con rappresentazione delle informazioni. per esempio. App bancaria, app Telecom

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.