.war बनाम .ear फ़ाइल


566

.War और .ear फ़ाइल में क्या अंतर है?


2
के बारे में अधिक समझने के लिए .JAR, .WAR and .EARआप एक वीडियो ट्यूटोरियल भी देख सकते हैं। यह बहुत सरल या अधिक समझने योग्य है। यह समझा जाएगा क्या है अंतर के बीच .JAR, .WAR और .EAR वीडियो ट्यूटोरियल : बीच .JAR, .WAR और .EAR अंतर
भारती रावत

2
जावा दुनिया में आपका स्वागत है जहां किसी ने सोचा था कि। ज़िप एक्सटेंशन के साथ एक ज़िप फ़ाइल को छोड़ना पर्याप्त नहीं है और इसलिए इसका नाम बदलकर .jar / .ear या .war पर आधारित होना चाहिए जहां आप अंततः इसे स्थानांतरित कर रहे हैं।
पिस्ताचियो

जवाबों:


492

से GeekInterview :

J2EE एप्लिकेशन में, मॉड्यूल को उनकी कार्यक्षमता के आधार पर EAR, JAR और WAR के रूप में पैक किया जाता है

JAR: EJB मॉड्यूल जिसमें एंटरप्राइज़ जावा बीन्स (क्लास फाइल्स) होते हैं और EJB परिनियोजन डिस्क्रिप्टर को JAR फ़ाइलों के साथ JAR एक्सटेंशन के रूप में पैक किया जाता है।

WAR: वेब मॉड्यूल जिसमें सर्वलेट क्लास फाइल्स, JSP फाइल्स, सपोर्टिंग फाइल्स, GIF और HTML फाइल्स को .AR (वेब ​​आर्काइव) एक्सटेंशन वाली JAR फाइल के रूप में पैक किया जाता है।

EAR: उपरोक्त सभी फाइलें (.jar और .war) .AR (एंटरप्राइज आर्काइव) एक्सटेंशन वाली JAR फाइल के रूप में पैक की जाती हैं और एप्लीकेशन सर्वर में तैनात की जाती हैं।


63
इस पोस्ट से मुझे लगता है कि EAR एक बड़े EAR में एक साथ JARS और WARS दोनों है, जो मुझे लगता है कि इतना आसान नहीं है।
गोंजालेज

4
सार में सभी पुरालेख (JAR) हैं, लेकिन उनकी प्रकृति / सामग्री को अलग करने के लिए अलग-अलग विस्तार के साथ।
KNU

1
सेम के लिए ईएआर और अलग-अलग जार ज्यादातर मामलों में अनावश्यक हैं। एक संग्रह में सभी वर्गों के साथ एक साधारण WAR सामान्य है। यहाँ एक अधिक विस्तृत विवरण दिया गया है: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

एक युद्ध (वेब संग्रह) एक मॉड्यूल है कि एक में लोड हो जाता है वेब कंटेनर एक के जावा अनुप्रयोग सर्वर । एक जावा एप्लिकेशन सर्वर में दो कंटेनर (रनटाइम वातावरण) होते हैं - एक वेब कंटेनर है और दूसरा एक ईजेबी कंटेनर है।

वेब कंटेनर मेजबान वेब JSP या सर्वलेट API पर आधारित अनुप्रयोगों - एक की अधिक ताकि - वेब अनुरोध से निपटने के लिए विशेष रूप से डिजाइन वितरित कंप्यूटिंग के अनुरोध / प्रतिक्रिया शैली । एक वेब कंटेनर को WAR फ़ाइल के रूप में पैक करने के लिए वेब मॉड्यूल की आवश्यकता होती है - जो कि फ़ोल्डर web.xmlमें एक फ़ाइल के साथ एक विशेष JAR फ़ाइल है WEB-INF

एक EJB कंटेनर विस्तारित व्यापार कार्यक्षमता प्रदान करने के लिए डिज़ाइन किए गए EJB API पर आधारित एंटरप्राइज़ जावा बीन्स की मेजबानी करता है, जैसे कि घोषणात्मक लेनदेन, घोषणात्मक विधि स्तर सुरक्षा और मल्टीप्रोकोल समर्थन - इसलिए वितरित कंप्यूटिंग की एक आरपीसी शैली का अधिक । EJB कंटेनरों को JJ फ़ाइलों के रूप में पैक करने के लिए EJB मॉड्यूल की आवश्यकता होती है - इनमें फ़ोल्डर ejb-jar.xmlमें एक फ़ाइल होती है META-INF

एंटरप्राइज़ अनुप्रयोगों में एक या अधिक मॉड्यूल शामिल हो सकते हैं जो या तो वेब मॉड्यूल (WAR फ़ाइल के रूप में पैक किए गए), EJB मॉड्यूल (JAR फ़ाइल के रूप में पैक किए गए) या दोनों हो सकते हैं। एंटरप्राइज़ एप्लिकेशन को EAR फ़ाइलों के रूप में पैक किया जाता है - ये विशेष JAR फाइलें होती हैं जिनमें फ़ोल्डर application.xmlमें एक फ़ाइल होती है META-INF

मूल रूप से, EAR फाइलें WAR फाइलें और JAR फाइलों से युक्त एक सुपरसेट होती हैं । Java अनुप्रयोग सर्वर WAR फ़ाइल में स्टैंडअलोन वेब मॉड्यूल की तैनाती की अनुमति देते हैं, हालांकि आंतरिक रूप से, वे EAR फ़ाइलों को WAR फ़ाइलों के आसपास एक आवरण के रूप में बनाते हैं। टॉमकैट और जेट्टी जैसे स्टैंडअलोन वेब कंटेनर ईएआर फ़ाइलों का समर्थन नहीं करते हैं - ये पूर्ण-अनुप्रयोग अनुप्रयोग सर्वर नहीं हैं। इन कंटेनरों में वेब अनुप्रयोगों को केवल WAR फ़ाइलों के रूप में तैनात किया जाना है।

एप्लिकेशन सर्वर में, ईएआर फाइलों में एप्लिकेशन सुरक्षा भूमिका मानचित्रण, ईजेबी संदर्भ मानचित्रण और वेब मॉड्यूल के संदर्भ रूट URL मैपिंग जैसे कॉन्फ़िगरेशन होते हैं।

वेब मॉड्यूल और ईजेबी मॉड्यूल के अलावा, ईएआर फाइलों में आरएआर फाइलों के रूप में पैक किए गए कनेक्टर मॉड्यूल और आरएआर फाइल के रूप में पैक किए गए क्लाइंट मॉड्यूल भी हो सकते हैं।


32
+1 क्योंकि यह उत्तर बताता है कि आप एक या दूसरे का उपयोग क्यों करना चाहते हैं।
जेसन व्हीलर

7
@KNU हाँ, .jar, .warऔर .earफ़ाइलों सरल ज़िप अभिलेखागार, इस प्रकार किसी भी प्रोग्राम है कि साधारण .zip फ़ाइलों को संभाल सकता है द्वारा खोला जा करने में सक्षम हैं।
acdcjunior

41

युद्ध - वेब संग्रह। यह सर्वलेट मानक के अनुसार वेब एप्लिकेशन को तैनात करने के लिए उपयोग किया जाता है। यह एक जार फाइल है जिसमें एक विशेष निर्देशिका होती है जिसे WEB-INF कहा जाता है और इसके अंदर कई फाइलें और निर्देशिकाएं (web.xml, lib, classes) और साथ ही सभी HTML, JSP, चित्र, CSS, जावास्क्रिप्ट और वेब एप्लिकेशन के अन्य संसाधन होते हैं।

कान - उद्यम संग्रह। इसका उपयोग EJBs, वेब एप्लिकेशन और 3rd पार्टी लाइब्रेरी वाले एंटरप्राइज़ एप्लिकेशन को लागू करने के लिए किया जाता है। यह एक जार फ़ाइल भी है, इसमें एपीपी-इन नामक एक विशेष निर्देशिका है जिसमें application.xml फ़ाइल होती है, और इसमें जार और युद्ध फाइलें होती हैं।


क्या आपका मतलब APP-INF डायरेक्टरी की बजाय META-INF से है?
ज़ावेल

26

WAR (वेब ​​आर्काइव) फाइलों में सर्वलेट क्लास फाइलें, JSP (जावा सर्वलेट पेज), HTML और ग्राफिकल फाइलें और अन्य सहायक फाइलें होती हैं।

EAR (एंटरप्राइज़ आर्काइव) फ़ाइलों में JAR फ़ाइलों के साथ कोड वाली WAR फाइलें होती हैं।

उन फ़ाइलों में अन्य चीजें भी हो सकती हैं, लेकिन उनके मूल रूप से उनके लिए क्या मतलब है जैसे वे ध्वनि का अर्थ है: वेब-प्रकार के सामान के लिए WAR, उद्यम प्रकार के सामान के लिए EAR (WARs, कोड, कनेक्टर्स एट अल)।


2
मेरे मामले में मैं हमेशा WEB-INF / lib फ़ोल्डर में जार के साथ WAR को तैनात करता हूं और वह काम करता है। तो मुझे ईएआर आर्काइव का उपयोग क्यों करना चाहिए?
स्वल्पोनुबंटु

2
@swapyonubuntu, यदि आप सिर्फ एक वेब एप्लिकेशन (विशेष रूप से, एक एकल सर्वलेट संदर्भ) की तैनाती कर रहे हैं, तो WAR फ़ाइलों को करने में कुछ भी गलत नहीं है। ईएआर फाइलें पूर्ण विकसित एंटरप्राइज़ ऐप के लिए बेहतर हैं, जिनमें कई वेब ऐप शामिल हैं।
पैक्सिडाब्लो

1
माइक्रोसोर्विस के इस युग में, प्रत्येक WAR को पूरी तरह से अलग रखने और उन्हें एक अखंड EAR में एक साथ बांधने के बजाय अलग से तैनात करने के लिए अधिक समझदारी नहीं होगी?
सायओ ओलादजी 18

18

जार फाइलें

एक JAR (जावा आर्काइव के लिए छोटा) फ़ाइल एक ही में कई फ़ाइलों के संयोजन की अनुमति देता है। '.Jar' के साथ फाइल; विस्तार का उपयोग सॉफ्टवेयर डेवलपर्स द्वारा जावा कक्षाओं और विभिन्न मेटाडेटा को वितरित करने के लिए किया जाता है। ये पुस्तकालयों और संसाधन फ़ाइलों के साथ-साथ सहायक फ़ाइलों (जैसे संपत्ति फ़ाइलें) को भी रखते हैं।

उपयोगकर्ता जावा डेवलपमेंट किट (JDK) '.jar' कमांड के साथ JAR फाइलें निकाल और बना सकते हैं। जिप टूल्स का भी इस्तेमाल किया जा सकता है।

JAR फ़ाइलों में वैकल्पिक मैनिफ़ेस्ट फ़ाइलें होती हैं। मैनिफ़ेस्ट फ़ाइल के भीतर प्रविष्टियाँ JAR फ़ाइल के उपयोग को निर्धारित करती हैं। फ़ाइल वर्ग के लिए 'मुख्य' वर्ग विनिर्देश फ़ाइल को एक अलग या 'स्टैंड-अलोन' प्रोग्राम के रूप में दर्शाता है।

WAR फाइलें

एक WAR (या वेब एप्लिकेशन संग्रह) फ़ाइलों में XML (एक्सटेंसिबल मार्कअप लैंग्वेज) फाइलें, जावा कक्षाएं, साथ ही इंटरनेट एप्लिकेशन के प्रयोजनों के लिए जावा सर्वर पेज शामिल हो सकते हैं। यह पुस्तकालयों और वेब पृष्ठों को चिह्नित करने के लिए भी कार्यरत है जो वेब अनुप्रयोग बनाते हैं। '.War' एक्सटेंशन वाली फ़ाइलों में सर्वर या JSP (जावा सर्वर पेज) कंटेनरों के साथ उपयोग के लिए वेब ऐप होता है। इसमें जेएसपी, एचटीएमएल (हाइपरटेक्स्ट मार्कअप लैंग्वेज), जावास्क्रिप्ट और उपर्युक्त वेब ऐप बनाने के लिए विभिन्न फाइलें हैं।

WAR फ़ाइल को विशेष निर्देशिकाओं और फ़ाइलों के लिए अनुमति देने के लिए संरचित किया जाता है। कोड की सत्यता दिखाने के लिए इसमें एक डिजिटल हस्ताक्षर (एक JAR फ़ाइल की तरह) भी हो सकता है।

EAR फ़ाइलें

एक ईएआर (एंटरप्राइज आर्काइव) फाइल जार और डब्ल्यूएआर फाइलों को एक एकल संग्रह में विलय कर देती है। '.Ear' एक्सटेंशन वाली इन फ़ाइलों में मेटाडेटा के लिए एक निर्देशिका है। मॉड्यूल को ऐप सर्वर के भीतर विभिन्न मॉड्यूल के सुचारू और एक साथ संचालन के लिए संग्रह पर पैक किया जाता है।

EAR फ़ाइल में परिनियोजन वर्णनकर्ता (जो XML फ़ाइलें हैं) हैं जो प्रभावी रूप से विभिन्न मॉड्यूलों की तैनाती को निर्धारित करते हैं।

यहाँ छवि विवरण दर्ज करें


1
बस उत्कृष्ट ग्राफिक के लिए शीर्ष उत्तर होना चाहिए, धन्यवाद, बहुत मदद!
fl0w

12

देखें: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

टार (टेप अभिलेखागार) - प्रयुक्त प्रारूप फ़ाइलनाम की धारावाहिक इकाइयों में लिखा गया है, फ़ाइल करें, फ़ाइलडेटा - कोई संपीड़न नहीं। विशाल हो सकता है

जार (जावा आर्काइव) - उपयोग की जाने वाली संपीड़न तकनीक - आम तौर पर कक्षा / जावा फाइलों जैसी जावा जानकारी होती है। लेकिन किसी भी फाइल और निर्देशिका संरचना को शामिल कर सकते हैं

युद्ध (वेब ​​अनुप्रयोग अभिलेखागार) - जार फ़ाइलों की तरह ही केवल JSP / तैनाती के उद्देश्यों के लिए सर्वलेट युक्ति के अनुसार विशिष्ट निर्देशिका संरचना है

कान (उद्यम अभिलेखागार) - जार फ़ाइलों की तरह। जे 2 ईई आवश्यकताओं के बाद निर्देशिका संरचना है ताकि इसे जे 2 ईई एप्लिकेशन सर्वर पर तैनात किया जा सके। - कई JAR और WAR फ़ाइलों को शामिल कर सकते हैं


6

ईयर फाइलें एप्लिकेशन सर्वर के साथ इंटरैक्शन को कॉन्फ़िगर करने के लिए अधिक विकल्प प्रदान करती हैं।

उदाहरण के लिए: यदि एप्लिकेशन सर्वर का हाइबरनेट संस्करण आपके आश्रितों द्वारा उपलब्ध कराए गए पुराने से अधिक है, तो आप JBOSS के लिए कक्षा-कर्ताओं को अलग करने और संघर्षों से बचने के लिए निम्नलिखित को कान-परवर्ती- jboss-beans.xml में जोड़ सकते हैं:

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

या 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> 

यह सुनिश्चित करेगा कि आपके एप्लिकेशन और एप्लिकेशन सर्वर के बीच कोई क्लास लोडर संघर्ष नहीं है।

आम तौर पर क्लास लोडर तंत्र इस तरह काम करता है:

जब क्लास लोडिंग अनुरोध एक क्लास लोडर को प्रस्तुत किया जाता है, तो यह पहले अपने माता-पिता के क्लास लोडर से अनुरोध पूरा करने के लिए कहता है। माता-पिता, बदले में अपने माता-पिता से कक्षा के लिए तब तक पूछते हैं जब तक कि अनुरोध पदानुक्रम के शीर्ष पर नहीं पहुंच जाता। यदि पदानुक्रम के शीर्ष पर क्लास लोडर अनुरोध को पूरा नहीं कर सकता है, तो चाइल्ड क्लास लोडर जिसने इसे कक्षा लोड करने के लिए जिम्मेदार है।

क्लास लोडर को अलग करने से, आपका कान क्लास लोडर माता-पिता (= JBoss / अन्य AS क्लास लोडर) में नहीं दिखेगा। जहाँ तक मुझे पता है, यह युद्ध फाइलों के साथ संभव नहीं है।


KNU: एक इयर फाइल का यह उपयोग केवल इसके उपयोग से अधिक मान्य है क्योंकि स्वीकृत उत्तर में कहा गया है कि "इसमें सर्वलेट क्लास फाइल्स, JSP FIles, सपोर्टिंग फाइल्स, GIF और HTML फाइल्स शामिल हैं"। चूंकि युद्ध की फाइलों में gif, html, jsp's, सर्वलेट्स शामिल हो सकते हैं, ... यदि सभी ने "अपने ज़ोर से जवाब दिया", तो शायद हम सभी इस मुद्दे पर समझदार हो सकते हैं।
मार्क

मावेन करता है कि आप के लिए नहीं? आप प्रति संस्करण निर्भरता निर्दिष्ट कर सकते हैं और वे / lib फ़ोल्डर में शामिल हो सकते हैं। (एक युद्ध फ़ाइल में)
सेबास

हाँ, लेकिन एप्लिकेशन सर्वर / सर्वलेट कंटेनर लिबर फ़ोल्डर में इन ओवरराइड को चुनने के लिए चुन सकता है, जो वह अपने स्वयं के लिबास फ़ोल्डर में प्रदान करता है। इससे उसको रोका जा सकता है। यह सब प्रयुक्त क्लासलोडिंग तंत्र पर निर्भर करता है।
मार्क

6

J2EE तीन प्रकार के अभिलेखागार को परिभाषित करता है:

  1. जावा अभिलेखागार (JAR) एक JAR फ़ाइल एक या एक से अधिक जावा कक्षाएं, एक प्रकटन, और एक डिस्क्रिप्टर को एन्क्रिप्ट करती है। JAR फाइलें संग्रह का सबसे निचला स्तर है। E2Bs और क्लाइंट-साइड Java अनुप्रयोगों की पैकेजिंग के लिए J2EE में JAR फ़ाइलों का उपयोग किया जाता है।

  2. वेब अभिलेखागार (WAR) WAR फाइलें JAR फाइलों के समान हैं, सिवाय इसके कि वे विशेष रूप से सर्वलेट्स, JSPs और सहायक कक्षाओं से बने वेब अनुप्रयोगों के लिए हैं।

  3. एंटरप्राइज आर्काइव्स (ईएआर) “एक ईएआर फ़ाइल में उन सभी घटकों को शामिल किया जाता है जो किसी विशेष J2EE एप्लिकेशन को बनाते हैं।


0

परियोजना के परिवहन के लिए तैनाती को आसान बनाया। एक फ़ाइल में संपीड़ित करने की आवश्यकता है। JAR (जावा संग्रह) .class फ़ाइलों का समूह

WAR (वेब ​​संग्रह) - प्रत्येक युद्ध एक वेब अनुप्रयोग का प्रतिनिधित्व करता है - केवल वेब संबंधित तकनीकों जैसे सर्वलेट, jsps का उपयोग किया जा सकता है। - टॉमकैट सर्वर पर चला सकते हैं - वेब से संबंधित तकनीकों द्वारा विकसित वेब ऐप केवल जेएसपी सर्वलेट HTML जेएस - सूचना प्रतिनिधित्व केवल कोई लेनदेन नहीं।

ईएआर (एंटरप्राइज आर्काइव) - प्रत्येक कान एक एंटरप्राइज़ एप्लिकेशन का प्रतिनिधित्व करता है - हम ईजेबी जैसे जे 2 ई से कुछ भी उपयोग कर सकते हैं, जेएम खुशी से इस्तेमाल किया जा सकता है। - ग्लासफिश जैसे सर्वर पर चल सकता है टॉमटैट सर्वर पर नहीं। एंटरप्राइज़ ऐप j2ee से किसी भी तकनीक द्वारा किसी भी तकनीक के द्वारा विकसित किया गया है जैसे कि सभी वेब ऐप प्लस ejbs jms इत्यादि - जानकारी प्रतिनिधित्व के साथ लेनदेन करता है। जैसे। बैंक ऐप, टेलीकॉम ऐप

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.