tập tin .war vs .ear


566

Sự khác biệt giữa tệp .war và .ear là gì?


2
Để hiểu thêm về .JAR, .WAR and .EARBạn cũng có thể xem một video hướng dẫn. Nó rất đơn giản hoặc dễ hiểu hơn. Nó sẽ giải thích sự khác biệt giữa .JAR, .WAR.EAR Video Hướng dẫn : Sự khác biệt giữa .JAR, .WAR và .EAR
Bharti Rawat

2
Chào mừng bạn đến với thế giới Java nơi ai đó nghĩ rằng để lại tệp zip có phần mở rộng .zip là không đủ, và do đó, nó phải được đổi tên thành .jar / .ear hoặc .war dựa trên nơi bạn cuối cùng sẽ di chuyển nó.
pistacchio

Câu trả lời:


492

Từ GeekInterview :

Trong ứng dụng J2EE, các mô-đun được đóng gói dưới dạng EAR, JAR và WAR dựa trên chức năng của chúng

JAR: Các mô-đun EJB chứa các hạt java doanh nghiệp (tệp lớp) và mô tả triển khai EJB được đóng gói dưới dạng tệp JAR có phần mở rộng .jar

WAR: Các mô-đun web chứa tệp lớp Servlet, Tệp JSP, tệp hỗ trợ, tệp GIF và tệp HTML được đóng gói dưới dạng tệp JAR với phần mở rộng .war (lưu trữ web)

EAR: Tất cả các tệp trên (.jar và .war) được đóng gói dưới dạng tệp JAR với phần mở rộng .ear (lưu trữ doanh nghiệp) và được triển khai vào Máy chủ ứng dụng.


63
Bài đăng này khiến tôi nghĩ rằng EAR chỉ là cả JARS và WARS cùng nhau trong một EAR lớn, mà tôi nghĩ là không đơn giản.
Lay González

4
Tất cả về bản chất là Lưu trữ (JAR) nhưng với phần mở rộng khác nhau để ngụ ý bản chất / nội dung của chúng.
KNU

1
EAR và JAR riêng cho đậu là không cần thiết trong hầu hết các trường hợp. Một WAR đơn giản với tất cả các lớp trong một kho lưu trữ là bình thường. Dưới đây là một lời giải thích chi tiết hơn: adam-bien.com/cont/abien/entry/ears_wars_and_size_matters
Muffars Rinkevics

599

Một WAR (Web Archive) là một mô-đun đó được nạp vào một thùng chứa Web của một máy chủ ứng dụng Java . Máy chủ ứng dụng Java có hai bộ chứa (môi trường thời gian chạy) - một là bộ chứa Web và cái còn lại là bộ chứa EJB.

Bộ chứa Web lưu trữ các ứng dụng Web dựa trên JSP hoặc API của Servlets - được thiết kế dành riêng cho xử lý yêu cầu web - vì vậy nhiều hơn một kiểu yêu cầu / phản hồi của điện toán phân tán . Một bộ chứa Web yêu cầu mô-đun Web phải được đóng gói dưới dạng tệp WAR - đó là tệp JAR đặc biệt có web.xmltệp trong WEB-INFthư mục.

Một bộ chứa EJB lưu trữ các java java doanh nghiệp dựa trên API EJB được thiết kế để cung cấp chức năng kinh doanh mở rộng như giao dịch khai báo, bảo mật mức phương thức khai báo và hỗ trợ đa phương tiện - nhiều kiểu RPC của máy tính phân tán . Các thùng chứa EJB yêu cầu các mô-đun EJB được đóng gói dưới dạng tệp JAR - những tệp này có một ejb-jar.xmltệp trong META-INFthư mục.

Các ứng dụng doanh nghiệp có thể bao gồm một hoặc nhiều mô-đun có thể là mô-đun Web (được đóng gói dưới dạng tệp WAR), mô-đun EJB (được đóng gói dưới dạng tệp JAR) hoặc cả hai mô-đun. Các ứng dụng doanh nghiệp được đóng gói dưới dạng tệp EAR - đây là các tệp JAR đặc biệt có chứa một application.xmltệp trong META-INFthư mục.

Về cơ bản, các tệp EAR là một siêu bộ chứa các tệp WAR và các tệp JAR . Máy chủ ứng dụng Java cho phép triển khai các mô-đun web độc lập trong một tệp WAR, mặc dù bên trong, chúng tạo các tệp EAR như một trình bao bọc xung quanh các tệp WAR. Các thùng chứa web độc lập như TomcatJetty không hỗ trợ các tệp EAR - đây không phải là các máy chủ Ứng dụng chính thức. Các ứng dụng web trong các thùng chứa này chỉ được triển khai dưới dạng tệp WAR.

Trong các máy chủ ứng dụng, các tệp EAR chứa các cấu hình như ánh xạ vai trò bảo mật ứng dụng, ánh xạ tham chiếu EJB và ánh xạ URL gốc ngữ cảnh của các mô-đun web.

Ngoài các mô-đun Web và mô-đun EJB, các tệp EAR cũng có thể chứa các mô-đun trình kết nối được đóng gói dưới dạng tệp RAR và mô-đun Máy khách được đóng gói dưới dạng tệp JAR.


32
+1 vì câu trả lời này mô tả lý do tại sao bạn có thể muốn sử dụng cái này hay cái kia.
Jason Wheeler

7
@KNU có, .jar, .war.earcác tập tin được lưu trữ zip đơn giản, do đó có thể được mở bằng bất kỳ chương trình có thể xử lý các file .zip bình thường.
acdcjunior

41

chiến tranh - lưu trữ web. Nó được sử dụng để triển khai các ứng dụng web theo tiêu chuẩn servlet. Nó là một tệp jar chứa một thư mục đặc biệt có tên WEB-INF và một số tệp và thư mục bên trong nó (web.xml, lib, các lớp) cũng như tất cả các tài nguyên HTML, JSP, hình ảnh, CSS, JavaScript và các tài nguyên khác của ứng dụng web

tai - lưu trữ doanh nghiệp. Nó được sử dụng để triển khai ứng dụng doanh nghiệp có chứa EJB, ứng dụng web và thư viện của bên thứ 3. Nó cũng là một tệp jar, nó có một thư mục đặc biệt gọi là APP-INF chứa tệp application.xml và nó chứa các tệp jar và war.


ý bạn là META-INF thay vì thư mục APP-INF?
Zavael

26

Các tệp WAR (lưu trữ web) chứa các tệp lớp servlet, tệp JSP (trang Java servlet), tệp HTML và đồ họa và các tệp hỗ trợ khác.

Các tệp EAR (lưu trữ doanh nghiệp) chứa các tệp WAR cùng với các tệp JAR chứa mã.

Có thể có những thứ khác trong các tệp đó nhưng về cơ bản chúng có nghĩa là những gì chúng có nghĩa là: WAR cho công cụ loại web, EAR cho công cụ loại doanh nghiệp (WARs, mã, trình kết nối et al).


2
Trong trường hợp của tôi, tôi luôn triển khai WAR với các tệp trong thư mục WEB-INF / lib và nó hoạt động. Vậy tại sao tôi nên sử dụng kho lưu trữ EAR?
swaccoonubfox 21/2/2015

2
@swaccoonubfox, nếu bạn chỉ triển khai một ứng dụng web (cụ thể hơn là bối cảnh một servlet), không có gì sai khi chỉ thực hiện các tệp WAR. Các tệp EAR là cách tốt hơn cho các ứng dụng doanh nghiệp đầy đủ, bao gồm cả các ứng dụng có nhiều ứng dụng web.
paxdiablo

1
Trong kỷ nguyên của các dịch vụ siêu nhỏ, sẽ không có ý nghĩa hơn khi giữ mỗi WAR hoàn toàn tách biệt và triển khai riêng thay vì kết hợp chúng lại với nhau thành một EAR nguyên khối?
Sayo Oladeji

18

Tệp JAR

Tệp JAR (viết tắt của Lưu trữ Java) cho phép kết hợp nhiều tệp thành một tệp duy nhất. Các tệp có '.jar'; tiện ích mở rộng được các nhà phát triển phần mềm sử dụng để phân phối các lớp Java và các siêu dữ liệu khác nhau. Chúng cũng chứa các thư viện và tệp tài nguyên, cũng như các tệp phụ kiện (như tệp thuộc tính).

Người dùng có thể trích xuất và tạo các tệp JAR bằng lệnh '.jar' của Bộ công cụ phát triển Java (JDK). Công cụ ZIP cũng có thể được sử dụng.

Các tệp JAR có các tệp kê khai tùy chọn. Các mục trong tệp kê khai quy định việc sử dụng tệp JAR. Một đặc tả lớp 'chính' cho một lớp tệp biểu thị tệp là một chương trình tách rời hoặc 'độc lập'.

Tập tin WAR

Các tệp WAR (hoặc lưu trữ ứng dụng web) có thể chứa các tệp XML (Ngôn ngữ đánh dấu mở rộng), các lớp Java, cũng như các trang Máy chủ Java cho các mục đích của ứng dụng Internet. Nó cũng được sử dụng để đánh dấu các thư viện và trang Web tạo nên một ứng dụng Web. Các tệp có phần mở rộng '.war' chứa ứng dụng Web để sử dụng với các thùng chứa máy chủ hoặc JSP (Trang máy chủ Java). Nó có JSP, HTML (Ngôn ngữ đánh dấu siêu văn bản), JavaScript và các tệp khác nhau để tạo các ứng dụng Web đã nói ở trên.

Một tệp WAR được cấu trúc như vậy để cho phép các thư mục và tệp đặc biệt. Nó cũng có thể có chữ ký điện tử (giống như tệp JAR) để hiển thị tính chính xác của mã.

Tập tin EAR

Tệp EAR (Lưu trữ doanh nghiệp) hợp nhất các tệp JAR và WAR vào một kho lưu trữ duy nhất. Các tệp có phần mở rộng '.ear' có một thư mục cho siêu dữ liệu. Các mô-đun được đóng gói vào kho lưu trữ để vận hành trơn tru và đồng thời các mô-đun khác nhau trong một máy chủ ứng dụng.

Tệp EAR cũng có các mô tả triển khai (là các tệp XML) có hiệu quả quyết định việc triển khai các mô-đun khác nhau.

nhập mô tả hình ảnh ở đây


1
nên là câu trả lời hàng đầu chỉ cho đồ họa tuyệt vời, cảm ơn bạn, giúp đỡ tuyệt vời!
fl0w

12

Tham khảo: http://www.wellho.net/mouth/754_tar-jar-war-ear-sar-files.html

tar (băng lưu trữ) - Định dạng được sử dụng là tệp được viết bằng các đơn vị nối tiếp của fileName, fileSize, fileData - không nén. có thể rất lớn

Jar (java archive) - các kỹ thuật nén được sử dụng - thường chứa thông tin java như các tệp lớp / java. Nhưng có thể chứa bất kỳ tập tin và cấu trúc thư mục

war (lưu trữ ứng dụng web) - tương tự như các tệp jar chỉ có cấu trúc thư mục cụ thể theo thông số kỹ thuật của JSP / Servlet cho mục đích triển khai

tai (lưu trữ doanh nghiệp) - tương tự như các tệp jar. có cấu trúc thư mục theo yêu cầu của J2EE để có thể triển khai trên các máy chủ ứng dụng J2EE. - có thể chứa nhiều tệp JAR và WAR


6

Các tệp tai cung cấp nhiều tùy chọn hơn để định cấu hình tương tác với máy chủ ứng dụng.

Ví dụ: nếu phiên bản ngủ đông của máy chủ ứng dụng cũ hơn phiên bản do phụ thuộc của bạn cung cấp, bạn có thể thêm phần sau vào trình triển khai tai-jboss-bean.xml cho JBOSS để cô lập trình nạp lớp và tránh xung đột:

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

hoặc đến 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> 

Điều này sẽ đảm bảo rằng không có xung đột trình nạp lớp giữa ứng dụng của bạn và máy chủ ứng dụng.

Thông thường cơ chế nạp lớp hoạt động như thế này:

Khi một yêu cầu tải lớp được trình bày cho trình nạp lớp, trước tiên nó yêu cầu trình nạp lớp cha của nó thực hiện yêu cầu. Đến lượt, cha mẹ yêu cầu lớp của nó cho lớp cho đến khi yêu cầu đạt đến đỉnh của hệ thống phân cấp. Nếu trình nạp lớp ở đầu phân cấp không thể đáp ứng yêu cầu, thì trình nạp lớp con được gọi là lớp đó chịu trách nhiệm tải lớp.

Bằng cách cách ly các trình nạp lớp, trình nạp lớp tai của bạn sẽ không tìm trong phần tử cha (= JBoss / trình nạp lớp AS khác). Theo tôi biết, điều này là không thể với các tập tin chiến tranh.


KNU: Việc sử dụng tệp tai này hợp lệ hơn so với chỉ sử dụng tệp này vì "nó chứa các tệp lớp Servlet, FI FIles, tệp hỗ trợ, tệp GIF và tệp HTML" như đã nêu trong câu trả lời được chấp nhận. Vì các tệp tin chiến tranh cũng có thể chứa gif, html, jsp, servlets, ... Nếu tất cả mọi người "trả lời theo ý mình", có lẽ tất cả chúng ta đều có thể trở nên khôn ngoan hơn trong vấn đề này.
Đánh dấu

Maven có làm điều đó cho bạn không? Bạn có thể chỉ định các phụ thuộc cho mỗi phiên bản và chúng được bao gồm trong thư mục / lib. (trong một tập tin chiến tranh)
Sebas

Vâng, nhưng máy chủ ứng dụng / thùng chứa servlet có thể chọn ghi đè những thứ này trong thư mục lib bằng các lib mà anh ấy cung cấp trong thư mục lib của riêng mình. Điều này có thể ngăn chặn điều đó. Tất cả phụ thuộc vào cơ chế nạp lớp được sử dụng.
Đánh dấu

6

J2EE định nghĩa ba loại tài liệu lưu trữ:

  1. Lưu trữ Java (JAR) Tệp JAR gói gọn một hoặc nhiều lớp Java, tệp kê khai và mô tả. Các tệp JAR là mức lưu trữ thấp nhất. Các tệp JAR được sử dụng trong J2EE để đóng gói EJB và Ứng dụng Java phía máy khách.

  2. Các tệp WAR của Lưu trữ web (WAR) tương tự như các tệp JAR, ngoại trừ chúng dành riêng cho các ứng dụng web được tạo từ Servlets, JSP và các lớp hỗ trợ.

  3. Lưu trữ doanh nghiệp (EAR) Một tệp EAR chứa tất cả các thành phần tạo nên một ứng dụng J2EE cụ thể.


0

Để làm cho việc vận chuyển dự án, triển khai thực hiện dễ dàng. cần phải nén thành một tập tin. Nhóm JAR (java archive) của các tệp. Class

WAR (lưu trữ web) - mỗi cuộc chiến đại diện cho một ứng dụng web - chỉ sử dụng các công nghệ liên quan đến web như servlet, jsps có thể được sử dụng. - có thể chạy trên máy chủ Tomcat - ứng dụng web được phát triển bởi các công nghệ liên quan đến web chỉ jsp servlet html js - đại diện thông tin chỉ không có giao dịch.

EAR (lưu trữ doanh nghiệp) - mỗi tai đại diện cho một ứng dụng doanh nghiệp - chúng tôi có thể sử dụng mọi thứ từ j2ee như ejb, jms có thể được sử dụng một cách vui vẻ. - có thể chạy trên Glassfish như máy chủ không phải trên máy chủ Tomcat. - ứng dụng doanh nghiệp bị lệch bởi bất kỳ công nghệ nào từ j2ee như tất cả các ứng dụng web cộng với ejbs jms, v.v. - không giao dịch với đại diện thông tin. ví dụ. Ứng dụng ngân hàng, ứng dụng viễn thông

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.