.war vs .ear ไฟล์


566

ความแตกต่างระหว่างไฟล์. war และ. ear คืออะไร


2
เพื่อทำความเข้าใจเพิ่มเติมเกี่ยวกับ.JAR, .WAR and .EARคุณสามารถดูวิดีโอสอน มันง่ายมากหรือเข้าใจง่ายขึ้น มันจะอธิบายสิ่งที่เป็นความแตกต่างระหว่างขวด, .WARและ.EAR วิดีโอสอน : ความแตกต่างระหว่างขวด, .WAR และ .EAR
Bharti เรวัต

2
ยินดีต้อนรับสู่โลก Java ที่ใครบางคนคิดว่าการปล่อยไฟล์ zip ด้วยนามสกุล. zip นั้นไม่เพียงพอและต้องเปลี่ยนชื่อเป็น. jar / .ear หรือ. war ตามที่คุณกำลังจะย้ายมันในที่สุด
pistacchio

คำตอบ:


492

จากGeekInterview :

ในแอ็พพลิเคชัน J2EE โมดูลจะถูกแพ็กเกจเป็น EAR, JAR และ WAR ตามการทำงานของมัน

JAR: โมดูล EJB ซึ่งมี enterprise java beans (ไฟล์คลาส) และตัวให้คำอธิบายการปรับใช้ EJB ถูกบีบอัดเป็นไฟล์ JAR ที่มีนามสกุล. jar

WAR: เว็บโมดูลที่มีไฟล์คลาส Servlet, ไฟล์ JSP, ไฟล์สนับสนุน, ไฟล์ GIF และ HTML ได้รับการบรรจุเป็นไฟล์ JAR ที่มีนามสกุล. war (เว็บไฟล์เก็บถาวร)

EAR: ไฟล์ทั้งหมดข้างบน (.jar และ. war) ถูกทำแพ็กเกจเป็นไฟล์ JAR ที่มีนามสกุล. ear (enterprise archive) และนำไปใช้งานใน Application Server


63
โพสต์นี้ทำให้ฉันคิดว่า EAR เป็นทั้ง JARS และ WARS ด้วยกันใน EAR ขนาดใหญ่ซึ่งฉันคิดว่าไม่ใช่เรื่องง่าย
Lay González

4
สิ่งสำคัญทั้งหมดคือไฟล์เก็บถาวร (JAR) แต่มีส่วนขยายต่างกันเพื่อสื่อถึงลักษณะ / เนื้อหาของพวกเขา
KNU

1
EARs และ JARs แยกต่างหากสำหรับถั่วนั้นไม่จำเป็นในกรณีส่วนใหญ่ WAR แบบง่ายพร้อมคลาสทั้งหมดในหนึ่งไฟล์เก็บถาวรเป็นเรื่องปกติ นี่คือคำอธิบายที่ละเอียดยิ่งขึ้น: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics

599

WAR (เก็บถาวรเว็บ)เป็นโมดูลที่ได้รับการโหลดลงที่เว็บคอนเทนเนอร์ของเซิร์ฟเวอร์ Java Application Java Application Server มีสองคอนเทนเนอร์ (สภาพแวดล้อมรันไทม์) - หนึ่งคือเว็บคอนเทนเนอร์และอีกหนึ่งคือคอนเทนเนอร์ EJB

เว็บคอนเทนเนอร์การใช้งานเว็บโฮสต์อยู่บนพื้นฐานของ JSP หรือ Servlets API - ออกแบบมาโดยเฉพาะสำหรับการจัดการการร้องขอเว็บ - เพื่อให้มากขึ้นของรูปแบบคำขอ / ตอบสนองของการคำนวณแบบกระจาย เว็บคอนเทนเนอร์ต้องการให้เว็บโมดูลถูกแพ็กเป็นไฟล์ WARซึ่งเป็นไฟล์ JAR พิเศษที่มีweb.xmlไฟล์ในWEB-INFโฟลเดอร์

ภาชนะ EJBเจ้าภาพองค์กรถั่ว Java บนพื้นฐานของ API EJB ได้รับการออกแบบเพื่อให้การทำงานธุรกิจขยายเช่นการทำธุรกรรมที่เปิดเผยการรักษาความปลอดภัยระดับวิธีการที่เปิดเผยและการสนับสนุนหลายโปรโตคอล - ดังนั้นมากขึ้นของรูปแบบ RPC ของการคำนวณแบบกระจาย คอนเทนเนอร์ EJB ต้องการโมดูล EJB ที่จะถูกแพ็กเกจเป็นไฟล์ JAR - ไฟล์เหล่านี้มีejb-jar.xmlไฟล์ในMETA-INFโฟลเดอร์

แอปพลิเคชันระดับองค์กรอาจประกอบด้วยหนึ่งโมดูลขึ้นไปที่สามารถเป็นเว็บโมดูล (รวมเป็นไฟล์ WAR), โมดูล EJB (รวมเป็นไฟล์ JAR) หรือทั้งสองอย่าง แอปพลิเคชันระดับองค์กรบรรจุเป็นไฟล์ EARซึ่งเป็นไฟล์ JAR พิเศษที่มีapplication.xmlไฟล์อยู่ในMETA-INFโฟลเดอร์

โดยทั่วไปไฟล์ EARเป็นเซ็ตที่มีไฟล์ WARและไฟล์ JAR Java Application Servers อนุญาตให้ปรับใช้เว็บโมดูลแบบสแตนด์อโลนในไฟล์ WAR แม้ว่าจะเป็นการภายใน แต่ก็สร้างไฟล์ EAR เป็น wrapper รอบไฟล์ WAR เว็บคอนเทนเนอร์แบบสแตนด์อโลนเช่นTomcatและJettyไม่รองรับไฟล์ EAR - สิ่งเหล่านี้ไม่ใช่แอพพลิเคชันเซิร์ฟเวอร์แบบเต็มรูปแบบ เว็บแอ็พพลิเคชันในคอนเทนเนอร์เหล่านี้จะถูกปรับใช้เป็นไฟล์ WAR เท่านั้น

ในแอ็พพลิเคชันเซิร์ฟเวอร์ไฟล์ EAR มีการกำหนดค่าเช่นการแม็พบทบาทความปลอดภัยของแอ็พพลิเคชันการแม็พการอ้างอิง EJB และการแม็พ URL รูทบริบทของเว็บโมดูล

นอกเหนือจากเว็บโมดูลและโมดูล EJB ไฟล์ EAR ยังสามารถมีโมดูลตัวเชื่อมต่อที่รวมเป็นไฟล์ RAR และโมดูลไคลเอ็นต์ที่รวมเป็นไฟล์ JAR


32
+1 เพราะคำตอบนี้อธิบายถึงสาเหตุที่คุณอาจต้องการใช้อย่างใดอย่างหนึ่ง
Jason Wheeler

7
@KNU ใช่.jar, .warและ.earไฟล์ที่เก็บซิปง่ายจึงสามารถจะเปิดโปรแกรมใด ๆ ที่สามารถจัดการไฟล์ซิปสามัญ
acdcjunior

41

สงคราม - เก็บถาวรเว็บ มันถูกใช้เพื่อปรับใช้เว็บแอ็พพลิเคชันตามมาตรฐานเซิร์ฟเล็ต เป็นไฟล์ jar ที่มีไดเรกทอรีพิเศษที่เรียกว่า WEB-INF และหลายไฟล์และไดเรกทอรีภายใน (web.xml, lib, คลาส) รวมถึง HTML, JSP, รูปภาพ, CSS, JavaScript และทรัพยากรอื่น ๆ ของเว็บแอปพลิเคชัน

ear - ไฟล์เก็บถาวรขององค์กร มันถูกใช้เพื่อปรับใช้แอปพลิเคชันองค์กรที่มี EJBs เว็บแอปพลิเคชันและห้องสมุดบุคคลที่สาม มันเป็นไฟล์ jar ด้วยมีไดเร็กทอรีพิเศษชื่อ APP-INF ที่มีไฟล์ application.xml และมีไฟล์ jar และ war


คุณหมายถึง META-INF แทนที่จะเป็นไดเรกทอรี APP-INF หรือไม่
Zavael

26

ไฟล์ WAR (เก็บถาวรเว็บ) มีไฟล์คลาส servlet, JSP (หน้า servlet Java), HTML และไฟล์กราฟิกและไฟล์สนับสนุนอื่น ๆ

ไฟล์ EAR (ไฟล์เก็บถาวรขององค์กร) มีไฟล์ WAR พร้อมกับไฟล์ JAR ที่มีรหัส

อาจมีสิ่งอื่น ๆ ในไฟล์เหล่านั้น แต่โดยทั่วไปแล้วมันมีความหมายสำหรับสิ่งที่ดูเหมือนว่าพวกเขาหมายถึง: WAR สำหรับสิ่งที่ประเภทของเว็บ, EAR สำหรับสิ่งที่ประเภทองค์กร (WARs, รหัส, ตัวเชื่อมต่อและอื่น ๆ )


2
ในกรณีของฉันฉันมักจะปรับใช้ WAR กับขวดในโฟลเดอร์ WEB-INF / lib และที่ทำงาน เหตุใดฉันจึงควรใช้ที่เก็บถาวร EAR
swapyonubuntu

2
@swapyonubuntu หากคุณเพิ่งปรับใช้เว็บแอปพลิเคชั่นเดียว (โดยเฉพาะบริบท servlet เดียว) ไม่มีอะไรผิดปกติที่จะทำไฟล์ WAR ไฟล์ EAR เป็นวิธีที่ดีกว่าสำหรับแอพระดับองค์กรที่เต็มรูปแบบ
paxdiablo

1
ในยุคไมโครไซต์นี้จะไม่เหมาะสมกว่าหรือไม่ที่จะทำให้แต่ละ WAR แยกจากกันอย่างสมบูรณ์และปรับใช้แยกต่างหากแทนที่จะรวมเข้าด้วยกันเป็น EAR เสาหิน?
Sayo Oladeji

18

ไฟล์ JAR

ไฟล์ JAR (ย่อมาจาก Java Archive) อนุญาตให้รวมไฟล์หลาย ๆ ไฟล์ไว้ในไฟล์เดียว ไฟล์ที่มี '.jar'; ส่วนขยายถูกใช้โดยผู้พัฒนาซอฟต์แวร์เพื่อกระจายคลาส Java และข้อมูลเมตาต่างๆ สิ่งเหล่านี้ยังเก็บไลบรารีและไฟล์ทรัพยากรรวมถึงไฟล์เสริม (เช่นไฟล์คุณสมบัติ)

ผู้ใช้สามารถแตกและสร้างไฟล์ JAR ด้วยคำสั่ง '.jar' ของ Java Development Kit (.JKK) อาจใช้เครื่องมือ ZIP

ไฟล์ JAR มีไฟล์รายการเสริม รายการภายในไฟล์รายการกำหนดการใช้งานไฟล์ JAR ข้อกำหนดคุณสมบัติคลาส 'main' สำหรับคลาสไฟล์จะระบุว่าไฟล์เป็นโปรแกรมที่แยกออกหรือ 'สแตนด์อะโลน'

ไฟล์ WAR

ไฟล์ WAR (หรือเก็บถาวรแอปพลิเคชันเว็บ) สามารถประกอบด้วยไฟล์ XML (Extensible Markup Language), คลาส Java, และเพจ Java Server สำหรับวัตถุประสงค์ของแอปพลิเคชันอินเทอร์เน็ต นอกจากนี้ยังใช้เพื่อทำเครื่องหมายไลบรารีและเว็บเพจที่ประกอบเป็นเว็บแอปพลิเคชัน ไฟล์ที่มีนามสกุล '.war' จะมีเว็บแอปพลิเคชันสำหรับใช้กับเซิร์ฟเวอร์หรือคอนเทนเนอร์ JSP (หน้าเซิร์ฟเวอร์ Java) มันมี JSP, HTML (Hypertext Markup Language), JavaScript และไฟล์ต่าง ๆ สำหรับการสร้างแอปพลิเคชันเว็บดังกล่าว

ไฟล์ WAR นั้นมีโครงสร้างเพื่ออนุญาตให้ใช้สำหรับไดเร็กทอรีและไฟล์พิเศษ นอกจากนี้ยังอาจมีลายเซ็นดิจิทัล (คล้ายกับไฟล์ JAR) เพื่อแสดงความจริงของรหัส

ไฟล์ EAR

ไฟล์ EAR (Enterprise Archive) จะรวมไฟล์ JAR และ WAR ไว้ในไฟล์เก็บถาวรเดียว ไฟล์เหล่านี้ที่มีนามสกุล '.ear' มีไดเรกทอรีสำหรับข้อมูลเมตา โมดูลจะถูกบรรจุลงในไฟล์เก็บถาวรเพื่อการทำงานที่ราบรื่นและพร้อมกันของโมดูลต่างๆภายในเซิร์ฟเวอร์แอป

ไฟล์ EAR ยังมีตัวให้คำอธิบายการปรับใช้ (ซึ่งเป็นไฟล์ XML) ซึ่งกำหนดการปรับใช้โมดูลที่แตกต่างกันได้อย่างมีประสิทธิภาพ

ป้อนคำอธิบายรูปภาพที่นี่


1
ควรเป็นคำตอบที่ดีที่สุดสำหรับกราฟิกที่ยอดเยี่ยมขอบคุณความช่วยเหลือที่ดี!
fl0w

12

อ้างอิง: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

tar (ไฟล์เก็บถาวรเทป) - รูปแบบที่ใช้คือไฟล์ที่เขียนในหน่วยอนุกรมของชื่อไฟล์, ขนาดไฟล์, ไฟล์ดาต้า - ไม่มีการบีบอัด สามารถใหญ่

Jar (เก็บถาวร java) - เทคนิคการบีบอัดที่ใช้ - โดยทั่วไปมีข้อมูล java เช่นไฟล์ class / java แต่สามารถมีไฟล์ใด ๆ และโครงสร้างไดเรกทอรี

war (เว็บแอ็พพลิเคชันไฟล์เก็บถาวร) - ไฟล์ jar คล้ายกันมีโครงสร้างไดเร็กทอรีเฉพาะตามข้อมูลจำเพาะ JSP / Servlet สำหรับการปรับใช้

ear (คลังเก็บขององค์กร) - คล้ายกับไฟล์ jar มีโครงสร้างไดเร็กทอรีตามข้อกำหนด J2EE เพื่อให้สามารถปรับใช้บนแอ็พพลิเคชันเซิร์ฟเวอร์ J2EE - สามารถมีไฟล์ JAR และ WAR หลายไฟล์


6

ไฟล์ Ear จัดเตรียมอ็อพชันเพิ่มเติมเพื่อกำหนดค่าการโต้ตอบกับแอ็พพลิเคชันเซิร์ฟเวอร์

ตัวอย่างเช่น: หากเวอร์ชัน hibernate ของแอ็พพลิเคชันเซิร์ฟเวอร์เก่ากว่าเวอร์ชันที่จัดเตรียมโดยการขึ้นต่อกันของคุณคุณสามารถเพิ่มสิ่งต่อไปนี้ใน ear-deployer-jboss-beans.xml สำหรับ JBOSS เพื่อแยก classloaders และหลีกเลี่ยงความขัดแย้ง:

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

สิ่งนี้จะทำให้แน่ใจได้ว่าไม่มีความขัดแย้งของ classloader ระหว่างแอ็พพลิเคชันของคุณกับแอ็พพลิเคชันเซิร์ฟเวอร์

โดยปกติกลไก classloader ทำงานเช่นนี้:

เมื่อมีการแสดงคำขอโหลดคลาสไปยังคลาสโหลดเดอร์มันจะถามคลาสโหลดเดอร์หลักเพื่อดำเนินการตามคำขอ ผู้ปกครองในทางกลับกันขอให้ผู้ปกครองสำหรับชั้นเรียนจนคำขอถึงด้านบนของลำดับชั้น หากคลาสโหลดเดอร์ที่ด้านบนของลำดับชั้นไม่สามารถดำเนินการตามคำร้องขอคลาสโหลดเดอร์ที่เรียกว่ารับผิดชอบการโหลดคลาส

ด้วยการแยก classloaders หู classloader ของคุณจะไม่มองใน parent (= JBoss / other classloader AS) เท่าที่ฉันรู้นี้เป็นไปไม่ได้กับไฟล์สงคราม


KNU: การใช้ไฟล์ ear นั้นมีความถูกต้องมากกว่าการใช้เพราะ "มันมีไฟล์คลาส Servlet, JSP FIles, ไฟล์ที่รองรับ, ไฟล์ GIF และ HTML" ตามที่ระบุไว้ในคำตอบที่ยอมรับ เนื่องจากไฟล์สงครามสามารถมี gif, html, jsp's, servlets, ... หากทุกคน "ตอบด้วยความพยายามของเขา" บางทีเราทุกคนอาจฉลาดในเรื่องนี้
Mark

Maven ไม่ได้ทำเพื่อคุณไม่? คุณสามารถระบุการขึ้นต่อหนึ่งเวอร์ชันและจะรวมอยู่ในโฟลเดอร์ / lib (ในไฟล์สงคราม)
Sebas

ใช่ แต่เซิร์ฟเวอร์แอปพลิเคชัน / คอนเทนเนอร์สามารถเลือกที่จะแทนที่สิ่งเหล่านี้ในโฟลเดอร์ lib ด้วย libs ที่เขาให้ไว้ในโฟลเดอร์ lib ของเขาเอง สิ่งนี้สามารถป้องกันได้ ทุกอย่างขึ้นอยู่กับกลไกการโหลดคลาสที่ใช้
Mark

6

J2EE กำหนดคลังเก็บสามประเภท:

  1. Java Archives (JAR)ไฟล์ JAR ห่อหุ้มคลาส Java ตั้งแต่หนึ่งคลาสขึ้นไปรายการและตัวอธิบาย ไฟล์ JAR เป็นไฟล์เก็บถาวรระดับต่ำสุด ไฟล์ JAR ถูกใช้ใน J2EE สำหรับการทำแพ็กเกจ EJB และ Java Applications ฝั่งไคลเอ็นต์

  2. ไฟล์ Web Archives (WAR) WAR คล้ายกับไฟล์ JAR ยกเว้นว่าเป็นไฟล์เฉพาะสำหรับเว็บแอ็พพลิเคชันที่ทำจาก Servlets, JSP และคลาสที่สนับสนุน

  3. Enterprise Archives (EAR) ” ไฟล์ EAR มีส่วนประกอบทั้งหมดที่ประกอบเป็นแอปพลิเคชัน J2EE เฉพาะ


0

เพื่อให้การขนส่งโครงการการปรับใช้ทำได้ง่าย จำเป็นต้องบีบอัดเป็นไฟล์เดียว กลุ่ม JAR (ไฟล์เก็บถาวร java) ของไฟล์. class

WAR (เก็บถาวรเว็บ) - สงครามแต่ละครั้งแสดงถึงเว็บแอปพลิเคชั่นเดียว - ใช้เฉพาะเทคโนโลยีที่เกี่ยวข้องกับเว็บเช่น servlet, jsps สามารถใช้ได้ - สามารถทำงานบนเซิร์ฟเวอร์ Tomcat - เว็บแอพที่พัฒนาโดยเทคโนโลยีที่เกี่ยวข้องกับเว็บเท่านั้น jsp servlet html js - การแสดงข้อมูลไม่มีการทำธุรกรรม

EAR (ไฟล์เก็บถาวรขององค์กร) - หูแต่ละข้างแสดงถึงแอปพลิเคชันองค์กรหนึ่ง - เราสามารถใช้ทุกอย่างจาก j2ee เช่น ejb, jms สามารถใช้ได้อย่างมีความสุข - สามารถทำงานบน Glassfish เช่นเซิร์ฟเวอร์ไม่ได้อยู่ในเซิร์ฟเวอร์ Tomcat - แอปขององค์กร devloped โดยเทคโนโลยีใด ๆ จาก j2ee เช่นแอปพลิเคชันเว็บทั้งหมดรวมถึง ejbs jms เป็นต้น - ทำธุรกรรมกับการแสดงข้อมูล เช่น. แอพธนาคารแอพเทเลคอม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.