plik .war vs .ear


566

Jaka jest różnica między plikiem .war a .ear?


2
Aby dowiedzieć się więcej na temat .JAR, .WAR and .EARMożesz również zobaczyć samouczek wideo. To jest bardzo proste lub bardziej zrozumiałe. Wyjaśni, jaka jest różnica między .JAR, .WAR i .EAR Samouczek wideo : Różnica między .JAR, .WAR i .EAR
Bharti Rawat

2
Witamy w świecie Java, w którym ktoś pomyślał, że pozostawienie pliku zip z rozszerzeniem .zip nie jest wystarczająco przedsiębiorcze i dlatego należy zmienić jego nazwę na .jar / .ear lub .war, w zależności od tego, gdzie w końcu go przenosisz.
pistacchio

Odpowiedzi:


492

Z GeekInterview :

W aplikacji J2EE moduły są pakowane jako EAR, JAR i WAR na podstawie ich funkcjonalności

JAR: moduły EJB zawierające korporacyjne pliki java bean (pliki klas) i deskryptor wdrażania EJB są pakowane jako pliki JAR z rozszerzeniem .jar

WAR: Moduły sieciowe zawierające pliki klasy serwletu, pliki JSP, pliki pomocnicze, pliki GIF i HTML są pakowane jako plik JAR z rozszerzeniem .war (archiwum sieciowe)

EAR: Wszystkie powyższe pliki (.jar i .war) są spakowane jako plik JAR z rozszerzeniem .ear (archiwum korporacyjne) i wdrożone na serwerze aplikacji.


63
Te posty sprawiają, że myślę, że EAR to po prostu JARS i WARS razem w dużym EAR, co moim zdaniem nie jest takie proste.
Lay González

4
Wszystko w istocie jest Archiwum (JAR), ale z innym rozszerzeniem, aby sugerować ich charakter / treść.
KNU

1
EAR i oddzielne JAR dla ziaren są w większości przypadków niepotrzebne. Prosta WAR ze wszystkimi klasami w jednym archiwum jest normalna. Oto bardziej szczegółowe wyjaśnienie: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

WAR (Web Archive) jest modułem, który zostanie załadowany do kontenera WWW z Java Application Server . Serwer aplikacji Java ma dwa kontenery (środowiska wykonawcze) - jeden to kontener WWW, a drugi to kontener EJB.

Do kontenerów Web aplikacje hostingowe w oparciu o JSP lub API serwletów - zaprojektowany specjalnie do obsługi żądań internetowych - więc raczej styl żądanie / odpowiedź z obliczeń rozproszonych . Kontener WWW wymaga, aby moduł Web był spakowany jako plik WAR - jest to specjalny plik JAR z web.xmlplikiem w WEB-INFfolderze.

An kontenerów EJB gospodarze Enterprise Java Beans w oparciu o API EJB zaprojektowany, aby zapewnić rozszerzoną funkcjonalność biznesowych, takich jak transakcje deklaratywnych, deklaratywny poziom bezpieczeństwa i multiprotocol metoda wsparcia - więc bardziej o stylu RPC z obliczeń rozproszonych . Kontenery EJB wymagają spakowania modułów EJB jako plików JAR - mają one ejb-jar.xmlplik w META-INFfolderze.

Aplikacje korporacyjne mogą składać się z jednego lub większej liczby modułów, które mogą być modułami sieciowymi (spakowanymi jako plik WAR), modułami EJB (spakowanymi jako plik JAR) lub obydwoma. Aplikacje korporacyjne są pakowane jako pliki EAR - są to specjalne pliki JAR zawierające application.xmlplik w META-INFfolderze.

Zasadniczo pliki EAR są nadzbiorem zawierającym pliki WAR i JAR . Serwery aplikacji Java umożliwiają wdrażanie samodzielnych modułów sieciowych w pliku WAR, chociaż wewnętrznie tworzą pliki EAR jako opakowanie wokół plików WAR. Samodzielne kontenery internetowe, takie jak Tomcat i Jetty , nie obsługują plików EAR - nie są to pełnoprawne serwery aplikacji. Aplikacje internetowe w tych kontenerach należy wdrażać wyłącznie jako pliki WAR.

Na serwerach aplikacji pliki EAR zawierają konfiguracje, takie jak mapowanie roli zabezpieczeń aplikacji, mapowanie referencji EJB i mapowanie kontekstowego adresu URL modułów internetowych.

Oprócz modułów sieciowych i modułów EJB, pliki EAR mogą również zawierać moduły konektora spakowane jako pliki RAR oraz moduły klienta spakowane jako pliki JAR.


32
+1, ponieważ ta odpowiedź opisuje, dlaczego możesz chcieć użyć jednego lub drugiego.
Jason Wheeler,

7
@KNU tak .jar, .wari .earpliki są proste archiwa zip, mógł więc być otwarte przez dowolny program, który może obsłużyć zwykłe pliki .zip.
acdcjunior

41

wojna - archiwum internetowe. Służy do wdrażania aplikacji internetowych zgodnie ze standardem serwletu. Jest to plik jar zawierający specjalny katalog o nazwie WEB-INF oraz kilka plików i katalogów w nim zawartych (web.xml, lib, klasy), a także wszystkie HTML, JSP, obrazy, CSS, JavaScript i inne zasoby aplikacji internetowej

ucho - archiwum przedsiębiorstwa. Służy do wdrażania aplikacji korporacyjnych zawierających komponenty EJB, aplikacje internetowe i biblioteki stron trzecich. Jest to również plik jar, ma specjalny katalog o nazwie APP-INF, który zawiera plik application.xml oraz zawiera pliki jar i war.


miałeś na myśli META-INF zamiast katalogu APP-INF?
Zavael

26

Pliki WAR (archiwum sieciowe) zawierają pliki klasy serwletów, strony JSP (strony serwletów Java), pliki HTML i graficzne oraz inne pliki pomocnicze.

Pliki EAR (archiwum korporacyjne) zawierają pliki WAR wraz z plikami JAR zawierającymi kod.

W tych plikach mogą znajdować się inne rzeczy, ale w zasadzie mają na myśli to, co brzmią tak, jak mają na myśli: WAR dla plików typu web, EAR dla plików typu enterprise (WARs, kod, konektory i in.).


2
W moim przypadku zawsze wdrażam WAR z słoikami w folderze WEB-INF / lib i to działa. Dlaczego więc mam korzystać z archiwum EAR?
swapyonubuntu

2
@swapyonubuntu, jeśli wdrażasz tylko jedną aplikację internetową (a dokładniej pojedynczy kontekst serwletu), nie ma nic złego w robieniu plików WAR. Pliki EAR są znacznie lepsze w przypadku pełnowymiarowych aplikacji korporacyjnych, w tym tych z wieloma aplikacjami internetowymi.
paxdiablo

1
Czy w tej erze mikrousług nie ma większego sensu trzymanie każdej WAR całkowicie osobno i rozmieszczanie osobno zamiast łączenia ich w monolityczny EAR?
Sayo Oladeji,

18

Pliki JAR

Plik JAR (skrót od Java Archive) pozwala na połączenie kilku plików w jeden. Pliki z „.jar”; rozszerzenia są wykorzystywane przez twórców oprogramowania do dystrybucji klas Java i różnych metadanych. Przechowują również biblioteki i pliki zasobów, a także pliki akcesoriów (takie jak pliki właściwości).

Użytkownicy mogą wyodrębniać i tworzyć pliki JAR za pomocą polecenia „.jar” Java Development Kit (JDK). Można również użyć narzędzi ZIP.

Pliki JAR mają opcjonalne pliki manifestu. Wpisy w pliku manifestu określają użycie pliku JAR. Specyfikacja „głównej” klasy klasy pliku oznacza plik jako odłączony lub „samodzielny” program.

Pliki WAR

Pliki WAR (lub archiwum aplikacji sieci Web) mogą zawierać pliki XML (Extensible Markup Language), klasy Java, a także strony Java Server do celów aplikacji internetowych. Służy również do oznaczania bibliotek i stron internetowych tworzących aplikację internetową. Pliki z rozszerzeniem „.war” zawierają aplikację internetową do użytku z kontenerami serwerowymi lub JSP (Java Server Page). Zawiera JSP, HTML (Hypertext Markup Language), JavaScript i różne pliki do tworzenia wyżej wymienionych aplikacji internetowych.

Plik WAR jest tak skonstruowany, że pozwala na specjalne katalogi i pliki. Może mieć także podpis cyfrowy (podobnie jak plik JAR), aby pokazać prawdziwość kodu.

Pliki EAR

Plik EAR (Enterprise Archive) łączy pliki JAR i WAR w jedno archiwum. Te pliki z rozszerzeniem „.ear” mają katalog metadanych. Moduły są spakowane w archiwum, aby zapewnić płynne i równoczesne działanie różnych modułów na serwerze aplikacji.

Plik EAR ma również deskryptory wdrażania (które są plikami XML), które skutecznie dyktują wdrażanie różnych modułów.

wprowadź opis zdjęcia tutaj


1
powinna być najlepsza odpowiedź tylko za doskonałą grafikę, dziękuję, świetna pomoc!
fl0w

12

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

tar (archiwa taśmowe) - stosowany format to plik zapisany w jednostkach szeregowych fileName, fileSize, fileData - bez kompresji. może być ogromny

Jar (archiwum java) - stosowane techniki kompresji - zazwyczaj zawierają informacje java, takie jak pliki klasy / java. Ale może zawierać dowolne pliki i strukturę katalogów

war (archiwa aplikacji internetowych) - podobnie jak pliki jar mają tylko określoną strukturę katalogów zgodnie ze specyfikacją JSP / Servlet do celów wdrażania

ucho (archiwa przedsiębiorstwa) - podobnie jak pliki jar. mieć strukturę katalogów zgodną z wymaganiami J2EE, aby można ją było wdrożyć na serwerach aplikacji J2EE. - może zawierać wiele plików JAR i WAR


6

Pliki Ear zapewniają więcej opcji konfigurowania interakcji z serwerem aplikacji.

Na przykład: jeśli hibernowana wersja serwera aplikacji jest starsza niż wersja dostarczona przez twoje zależności, możesz dodać następujące elementy do pliku ear-deployer-jboss-beans.xml, aby JBOSS izolował moduły ładujące klasy i unikał konfliktów:

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

lub do 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> 

Pozwoli to upewnić się, że nie ma konfliktu modułu ładującego między aplikacją a serwerem aplikacji.

Zwykle mechanizm modułu ładującego klasy działa w następujący sposób:

Gdy żądanie ładowania klasy jest przedstawiane modułowi ładującemu klasy, najpierw prosi moduł ładujący klasy nadrzędnej o spełnienie żądania. Rodzic z kolei prosi swojego rodzica o klasę, dopóki żądanie nie osiągnie szczytu hierarchii. Jeśli moduł ładujący klasy na szczycie hierarchii nie może spełnić żądania, wówczas moduł ładujący klasy potomnej, który go wywołał, jest odpowiedzialny za ładowanie klasy.

Izolując moduły ładujące klasy, moduł ładujący klasy ucho nie będzie szukał elementu nadrzędnego (= moduł ładujący klasy JBoss / inny AS). O ile wiem, nie jest to możliwe w przypadku plików wojen.


KNU: To użycie pliku ucha jest ważniejsze niż samo jego użycie, ponieważ „zawiera pliki klasy Servlet, pliki JSP, pliki pomocnicze, pliki GIF i HTML”, jak podano w zaakceptowanej odpowiedzi. Ponieważ pliki wojenne mogą również zawierać gif, html, jsp, serwlety, ... Gdyby każdy „odpowiedział z jego siłą”, być może wszyscy moglibyśmy być mądrzejsi w tej sprawie.
Mark

Czy Maven to dla ciebie robi nie? Możesz określić zależności dla poszczególnych wersji, które zostaną uwzględnione w folderze / lib. (w pliku wojennym)
Sebas,

Tak, ale kontener serwera aplikacji / serwletów może zastąpić je w folderze lib za pomocą bibliotek libs, które udostępnia we własnym folderze lib. To może temu zapobiec. Wszystko zależy od zastosowanego mechanizmu ładowania klas.
Mark

6

J2EE definiuje trzy typy archiwów:

  1. Archiwa Java (JAR) Plik JAR zawiera jedną lub więcej klas Java, manifest i deskryptor. Pliki JAR to najniższy poziom archiwizacji. Pliki JAR są używane w J2EE do pakowania EJB i aplikacji Java po stronie klienta.

  2. Archiwa WWW (WAR) Pliki WAR są podobne do plików JAR, z tym wyjątkiem, że są przeznaczone specjalnie do aplikacji internetowych wykonanych z serwletów, stron JSP i klas pomocniczych.

  3. Archiwa korporacyjne (EAR) ”Plik EAR zawiera wszystkie składniki, które składają się na określoną aplikację J2EE.


0

Aby ułatwić transport projektu, wdrożenie jest proste. trzeba skompresować do jednego pliku. Grupa plików JAR (archiwum Java) .class

WAR (archiwum internetowe) - każda wojna reprezentuje jedną aplikację internetową - używaj tylko technologii związanych z siecią, takich jak serwlet, można używać plików JSP. - można uruchomić na serwerze Tomcat - aplikacja internetowa opracowana tylko przez technologie pokrewne jsp servlet html js - reprezentacja informacji tylko bez transakcji.

EAR (archiwum korporacyjne) - każde ucho reprezentuje jedną aplikację korporacyjną - możemy używać czegokolwiek od j2ee, np. Ejb, z przyjemnością można używać jms. - może działać na Glassfish jak serwer, a nie na serwerze Tomcat. - aplikacja dla przedsiębiorstw opracowana przez dowolną technologię, od j2ee, jak każda aplikacja internetowa plus ejbs jms itp. - wykonuje transakcje z reprezentacją informacji. na przykład. Aplikacja bankowa, aplikacja telekomunikacyjna

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.