.war vs .ear dosyası


566

Bir nedir .war ve .ear dosya?


2
Hakkında daha fazla bilgi .JAR, .WAR and .EARedinmek için bir video eğitimi de görebilirsiniz. Çok basit veya daha anlaşılır. .JAR, .WAR ve .EAR arasındaki farkın ne olduğunu açıklayacaktır Video Eğitimi : .JAR, .WAR ve .EAR Arasındaki Fark
Bharti Rawat

2
Birinin .zip uzantılı bir zip dosyası bırakmanın yeterince girişimci olmadığını düşündüğü Java dünyasına hoş geldiniz ve bu nedenle sonunda taşıdığınız yere göre .jar / .ear veya .war olarak yeniden adlandırılmalıdır.
pistacchio

Yanıtlar:


492

Gönderen GeekInterview :

J2EE uygulamasında, modüller işlevselliklerine göre EAR, JAR ve WAR olarak paketlenir

JAR: Kurumsal java fasulye (sınıf dosyaları) ve EJB dağıtım tanımlayıcısı içeren EJB modülleri, .jar uzantılı JAR dosyaları olarak paketlenir

UYARI: Servlet sınıfı dosyaları, JSP Dosyaları, destek dosyaları, GIF ve HTML dosyaları içeren Web modülleri, .war (web arşivi) uzantılı bir JAR dosyası olarak paketlenir

EAR: Yukarıdaki tüm dosyalar (.jar ve .war) .ear (kurumsal arşiv) uzantılı bir JAR dosyası olarak paketlenir ve Uygulama Sunucusuna dağıtılır.


63
Bu mesajlar bana, EAR'ın büyük bir EAR'da hem JARS hem de WARS birlikte olduğunu düşündürüyor, ki bence bu kadar basit değil.
Lay González

4
Temelde hepsi Arşivdir (JAR), ancak doğasını / içeriğini ima etmek için farklı uzantılara sahiptir.
KNU

1
Fasulye için KULAKLAR ve ayrı JAR'lar çoğu durumda gereksizdir. Bir arşivdeki tüm sınıfların bulunduğu basit bir SAVAŞ normaldir. İşte daha ayrıntılı bir açıklama: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

Bir SAVAŞ (Web Arşiv) bir içine yüklenen bir modüldür Web kabın a Java Application Server . Java Uygulama Sunucusu'nun iki kapsayıcı (çalışma zamanı ortamları) vardır - biri Web kapsayıcısı, diğeri ise EJB kapsayıcısı.

Web kap JSP veya Servlet'ler API göre ana Web uygulamaları - web isteği kullanım için özel olarak tasarlanmış - bu nedenle daha fazla a dağıtık bilgisayar istek / yanıt tarzı . Web kapsayıcısı, Web modülünün WAR dosyası olarak paketlenmesini gerektirir; bu, klasördeki bir web.xmldosyaya sahip özel bir JAR dosyasıdır WEB-INF.

Bir EJB konteyner böyle bildirim işlemleri, bildirime yöntem seviyesi güvenlik ve birden çok iletişim desteği gibi genişletilmiş iş işlevsellik sağlamak üzere tasarlanmış EJB API tabanlı bilgisayarlar Şirket java fasulye - yani daha bir ait bir RPC stili bilgisayar dağıtılmış . EJB kapsayıcıları, EJB modüllerinin JAR dosyaları olarak paketlenmesini gerektirir ejb-jar.xml; bunların META-INFklasörde bir dosyası vardır .

Kurumsal uygulamalar , Web modülleri (WAR dosyası olarak paketlenmiştir), EJB modülleri (JAR dosyası olarak paketlenmiştir) veya her ikisi de olabilen bir veya daha fazla modülden oluşabilir. Kurumsal uygulamalar EAR dosyaları olarak paketlenir - bunlar klasörde bir application.xmldosya içeren özel JAR dosyalarıdır META-INF.

Temel olarak, EAR dosyaları WAR dosyalarını ve JAR dosyalarını içeren bir üst kümedir . Java Uygulama Sunucuları, bağımsız Web modüllerinin bir WAR dosyasına dağıtılmasına izin verir, ancak dahili olarak, WAR dosyalarının etrafında bir sarıcı olarak EAR dosyaları oluştururlar. Tomcat ve Jetty gibi bağımsız web kapsayıcıları EAR dosyalarını desteklemez - bunlar tam teşekküllü Uygulama sunucuları değildir. Bu kapsayıcılardaki web uygulamaları yalnızca WAR dosyaları olarak dağıtılacaktır.

Uygulama sunucularında, EAR dosyaları uygulama güvenliği rol eşlemesi, EJB referans eşlemesi ve web modüllerinin bağlam kökü URL eşlemesi gibi yapılandırmalar içerir.

Web modülleri ve EJB modülleri dışında, EAR dosyaları ayrıca RAR dosyaları olarak paketlenmiş bağlayıcı modülleri ve JAR dosyaları olarak paketlenmiş İstemci modülleri içerebilir.


32
+1 çünkü bu cevap neden birini veya diğerini kullanmak isteyebileceğinizi açıklamaktadır.
Jason Wheeler

7
@KNU evet .jar, .warve .eardosyalar basit zip arşivler, sıradan .zip dosyalarını işleyebilir herhangi bir program tarafından açılacak verme yeteneğine sahiptirler.
acdcjunior

41

savaş web arşivi. Web uygulamalarını sunucu uygulaması standardına göre dağıtmak için kullanılır. WEB-INF adı verilen özel bir dizini ve içindeki çeşitli dosyaları ve dizinleri (web.xml, lib, sınıflar) ve web uygulamasının tüm HTML, JSP, resimleri, CSS, JavaScript ve diğer kaynaklarını içeren bir kavanoz dosyasıdır.

kulak - işletme arşivi. EJB'leri, web uygulamalarını ve 3. taraf kitaplıklarını içeren kurumsal uygulamayı dağıtmak için kullanılır. Ayrıca bir jar dosyasıdır, application.xml dosyasını içeren APP-INF adlı özel bir dizine sahiptir ve jar ve savaş dosyaları içerir.


Bunu demek istedin: APP-INF dizini yerine META-INF?
Zavael

26

WAR (web arşivi) dosyaları sunucu uygulaması sınıf dosyalarını, JSP'leri (Java sunucu uygulaması sayfaları), HTML ve grafik dosyalarını ve diğer destek dosyalarını içerir.

EAR (kurumsal arşiv) dosyaları, WAR dosyalarını, kod içeren JAR dosyalarıyla birlikte içerir.

Bu dosyalarda başka şeyler de olabilir, ancak temel olarak kastettikleri anlamına gelirler: Web tipi şeyler için SAVAŞ, kurumsal tip şeyler için EAR (WARs, kod, bağlayıcılar ve diğerleri).


2
Benim durumumda her zaman WEB-INF / lib klasöründeki kavanozlarla WAR dağıtmak ve bu işe yarıyor. Öyleyse neden EAR arşivini kullanmalıyım?
swapyonubuntu

2
@swapyonubuntu, yalnızca tek bir web uygulaması (daha spesifik olarak, tek bir sunucu uygulaması bağlamı) dağıtıyorsanız, yalnızca WAR dosyaları yapmakla ilgili bir sorun yoktur. EAR dosyaları, birçok web uygulamasına sahip olanlar da dahil olmak üzere tam gelişmiş kurumsal uygulamalar için çok daha iyidir.
paxdiablo

1
Bu mikro hizmet çağında, her bir WAR'u tamamen ayrı tutmak ve bunları monolitik bir EAR'da bir araya getirmek yerine ayrı ayrı dağıtmak daha anlamlı olmaz mıydı?
Sayo Oladeji

18

JAR Dosyaları

Bir JAR (Java Arşivi kısaltması) dosyası, birkaç dosyanın tek bir dosyada birleştirilmesine izin verir. '.Jar' olan dosyalar; uzantısı, Java sınıflarını ve çeşitli meta verileri dağıtmak için yazılım geliştiricileri tarafından kullanılır. Bunlar ayrıca kitaplıkların ve kaynak dosyalarının yanı sıra aksesuar dosyalarını (özellik dosyaları gibi) tutar.

Kullanıcılar Java Geliştirme Kiti'nin (JDK) '.jar' komutuyla JAR dosyalarını çıkarabilir ve oluşturabilir. ZIP araçları da kullanılabilir.

JAR dosyalarının isteğe bağlı bildirim dosyaları vardır. Manifest dosyasındaki girdiler JAR dosyasının kullanımını belirler. Bir dosya sınıfı için 'ana' sınıf belirtimi, dosyayı bağımsız veya 'bağımsız' bir program olarak gösterir.

WAR Dosyaları

WAR (veya Web Uygulaması arşivi) dosyaları, İnternet uygulaması amacıyla XML (genişletilebilir İşaretleme Dili) dosyaları, Java sınıfları ve Java Sunucusu sayfalarını içerebilir. Ayrıca, bir Web uygulamasını oluşturan kitaplıkları ve Web sayfalarını işaretlemek için kullanılır. '.War' uzantılı dosyalar, sunucu veya JSP (Java Sunucu Sayfası) kapsayıcılarıyla kullanım için Web uygulamasını içerir. JSP, HTML (Köprü Metni Biçimlendirme Dili), JavaScript ve yukarıda belirtilen Web uygulamalarını oluşturmak için çeşitli dosyalara sahiptir.

WAR dosyası, özel dizinlere ve dosyalara izin verecek şekilde yapılandırılmıştır. Ayrıca, kodun doğruluğunu göstermek için dijital bir imzası da olabilir (JAR dosyasınınkine çok benzer).

EAR Dosyaları

Bir EAR (Enterprise Archive) dosyası, JAR ve WAR dosyalarını tek bir arşivde birleştirir. '.Ear' uzantılı bu dosyaların meta veriler için bir dizini vardır. Modüller, bir uygulama sunucusundaki farklı modüllerin düzgün ve eşzamanlı çalışması için arşiv üzerinde paketlenir.

EAR dosyasında, farklı modüllerin dağıtımını etkili bir şekilde dikte eden dağıtım tanımlayıcıları (XML dosyalarıdır) vardır.

resim açıklamasını buraya girin


1
sadece mükemmel grafik için en iyi cevap olmalı, teşekkür ederim, büyük yardım!
fl0w

12

Bakınız: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

tar (teyp arşivleri) - Kullanılan biçim, fileName, fileSize, fileData öğelerinin seri birimlerinde yazılan dosyadır - sıkıştırma yok. kocaman olabilir

Jar (java arşivi) - kullanılan sıkıştırma teknikleri - genellikle class / java dosyaları gibi java bilgileri içerir. Ancak herhangi bir dosya ve dizin yapısı içerebilir

war (web uygulaması arşivleri) - jar dosyalarına benzer şekilde, dağıtım amacıyla JSP / Servlet spesifikasyonlarına göre yalnızca belirli dizin yapıları vardır

ear (kurumsal arşivler) - jar dosyalarına benzer. J2EE uygulama sunucularına dağıtılabilmesi için J2EE gereksinimlerini izleyen dizin yapısına sahiptir. - birden fazla JAR ve WAR dosyası içerebilir


6

Kulak dosyaları, uygulama sunucusuyla etkileşimi yapılandırmak için daha fazla seçenek sunar.

Örneğin: uygulama sunucusunun hazırda bekletme sürümü bağımlılıklarınız tarafından sağlanandan daha eskiyse, JBOSS'un sınıf yükleyicileri ayırması ve çakışmalardan kaçınması için ear-deployer-jboss-beans.xml dosyasına aşağıdakileri ekleyebilirsiniz:

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

veya src / main / application / META-INF / jboss-app.xml dosyasına:

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

Bu, uygulamanız ve uygulama sunucusu arasında herhangi bir sınıf yükleyici çakışması olmamasını sağlayacaktır.

Normalde sınıf yükleyici mekanizması şu şekilde çalışır:

Bir sınıf yükleyiciye bir sınıf yükleme talebi sunulduğunda, ilk önce üst sınıf yükleyicisinden isteği yerine getirmesini ister. Daha sonra, üst öğe, istek hiyerarşinin en üstüne ulaşıncaya kadar üst sınıfından sınıf ister. Hiyerarşinin üst kısmındaki sınıf yükleyici isteği yerine getiremezse, sınıfın yüklenmesinden sorumlu olan alt sınıf yükleyici sorumludur.

Sınıf yükleyicileri izole ederek, kulak sınıf yükleyiciniz üst öğeye bakmaz (= JBoss / diğer AS sınıf yükleyici). Bildiğim kadarıyla, savaş dosyaları ile bu mümkün değil.


KNU: Bir kulak dosyasının bu kullanımı sadece onu kullanmaktan daha geçerlidir çünkü kabul edilen cevapta belirtildiği gibi "Servlet sınıfı dosyaları, JSP FIles, destek dosyaları, GIF ve HTML dosyaları içerir". Savaş dosyaları gif, html, jsp'ler, sunucu uygulamaları da içerebileceğinden ... Eğer herkes "gücüyle cevap verirse", belki de hepimiz bu konuda daha akıllı olabiliriz.
Mark

Maven bunu senin için yapmaz mı? Sürüm başına bağımlılıklar belirtebilirsiniz ve / lib klasörüne eklenirler. (savaş dosyasında)
Sebas

Evet, ancak uygulama sunucusu / sunucu uygulaması kapsayıcısı, lib klasöründe bunları kendi lib klasöründe sağladığı kütüphanelerle geçersiz kılmayı seçebilir. Bu önleyebilir. Her şey kullanılan sınıf yükleme mekanizmasına bağlıdır.
Mark

6

J2EE üç tür arşiv tanımlar:

  1. Java Arşivleri (JAR) JAR dosyası, bir veya daha fazla Java sınıfını, bir bildirimi ve bir tanımlayıcıyı içine alır. JAR dosyaları en düşük arşiv düzeyidir. JAR dosyaları J2EE'de EJB'leri ve istemci tarafı Java Uygulamalarını paketlemek için kullanılır.

  2. Web Arşivleri (WAR) WAR dosyaları, özellikle Servlets, JSP'ler ve destekleyici sınıflardan yapılan web uygulamaları için olmaları dışında JAR dosyalarına benzer.

  3. Kurumsal Arşivler (EAR) ”Bir EAR dosyası, belirli bir J2EE uygulamasını oluşturan tüm bileşenleri içerir.


0

Proje taşımasını kolaylaştırmak için dağıtım kolaylaştı. tek bir dosyada sıkıştırılması gerekir. .Class dosyalarının JAR (java arşivi) grubu

SAVAŞ (web arşivi) - her savaş bir web uygulamasını temsil eder - yalnızca servlet, jsps gibi web ile ilgili teknolojileri kullanın. - Tomcat sunucusunda çalışabilir - web ilgili teknolojiler tarafından geliştirilen web uygulaması sadece jsp servlet html js - bilgi gösterimi sadece hiçbir işlem.

EAR (kurumsal arşiv) - her kulak bir kurumsal uygulamayı temsil eder - jjee'den ejb gibi bir şey kullanabiliriz, jms mutlu bir şekilde kullanılabilir. - Tomcat sunucusunda değil sunucu gibi Glassfish üzerinde çalışabilir. - tüm web uygulaması artı ejbs jms vb gibi herhangi bir teknoloji j2ee bir şey tarafından geliştirilen kurumsal uygulaması - bilgi temsil ile işlemler yapar. Örneğin. Banka uygulaması, Telekom uygulaması

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.