File .war vs .ear

566

Apa perbedaan antara file .war dan .ear?

ria
sumber
2
Untuk memahami lebih lanjut tentang .JAR, .WAR and .EARAnda, Anda juga dapat melihat tutorial video. Ini sangat sederhana atau lebih mudah dimengerti. Ini akan menjelaskan apa perbedaan antara .JAR, .WAR, dan .EAR Video Tutorial : Perbedaan Antara .JAR, .WAR, dan .EAR
Bharti Rawat
2
Selamat datang di dunia Java di mana seseorang berpikir bahwa meninggalkan file zip dengan ekstensi .zip tidak cukup tegas dan karenanya harus diubah namanya menjadi .jar / .ear atau .war berdasarkan di mana Anda akhirnya memindahkannya.
pistacchio

Jawaban:

492

Dari GeekInterview :

Dalam aplikasi J2EE, modul dikemas sebagai EAR, JAR, dan WAR berdasarkan fungsinya

JAR: Modul EJB yang berisi kacang java perusahaan (file kelas) dan deskriptor penerapan EJB dikemas sebagai file JAR dengan ekstensi .jar

PERANG: Modul web yang berisi file kelas Servlet, File JSP, file pendukung, file GIF dan HTML dikemas sebagai file JAR dengan ekstensi .war (arsip web)

EAR: Semua file di atas (.jar dan .war) dipaket sebagai file JAR dengan ekstensi .ear (arsip perusahaan) dan digunakan untuk Server Aplikasi.

Elhoim
sumber
63
Posting ini membuat saya berpikir bahwa EAR hanyalah JAR dan WARS bersama dalam EAR besar, yang saya pikir tidak sesederhana itu.
Lay González
4
Semua intinya adalah Arsip (JAR) tetapi dengan ekstensi berbeda untuk menyiratkan sifat / konten mereka.
KNU
1
Dalam banyak kasus, EAR dan JAR terpisah untuk kacang tidak perlu. PERANG sederhana dengan semua kelas dalam satu arsip adalah normal. Berikut ini penjelasan yang lebih terperinci: adam-bien.com/roller/abien/entry/ears_wars_and_size_matters
Kaspars Rinkevics
599

Sebuah WAR (Web Archive) adalah modul yang akan dimuat ke dalam wadah Web dari Application Server Java . Java Application Server memiliki dua wadah (lingkungan runtime) - satu adalah wadah Web dan yang lainnya adalah wadah EJB.

The wadah Web aplikasi host Web berdasarkan JSP atau Servlets API - dirancang khusus untuk permintaan web penanganan - sehingga lebih dari gaya permintaan / tanggapan dari komputasi terdistribusi . Wadah Web memerlukan modul Web untuk dikemas sebagai file PERANG - yaitu file JAR khusus dengan web.xmlfile dalam WEB-INFfolder.

Sebuah wadah EJB menjadi tuan rumah kacang java Perusahaan berdasarkan API EJB yang dirancang untuk menyediakan fungsionalitas bisnis yang diperluas seperti transaksi deklaratif, keamanan tingkat metode deklaratif, dan dukungan multi-cokelat - sehingga lebih merupakan gaya komputasi distribusi terdistribusi RPC . Wadah EJB membutuhkan modul EJB untuk dikemas sebagai file JAR - ini memiliki ejb-jar.xmlfile dalam META-INFfolder.

Aplikasi Enterprise dapat terdiri dari satu atau lebih modul yang dapat berupa modul Web (dikemas sebagai file WAR), modul EJB (dikemas sebagai file JAR), atau keduanya. Aplikasi perusahaan dikemas sebagai file EAR - ini adalah file JAR khusus yang berisi application.xmlfile dalam META-INFfolder.

Pada dasarnya, file EAR adalah superset yang berisi file WAR dan file JAR . Server Aplikasi Java memungkinkan penyebaran modul web mandiri dalam file WAR, meskipun secara internal, mereka membuat file EAR sebagai pembungkus di sekitar file WAR. Wadah web mandiri seperti Tomcat dan Jetty tidak mendukung file EAR - ini bukan server Aplikasi lengkap. Aplikasi web dalam wadah ini harus digunakan sebagai file WAR saja.

Di server aplikasi, file EAR berisi konfigurasi seperti pemetaan peran keamanan aplikasi, pemetaan referensi EJB dan pemetaan URL root konteks modul web.

Terlepas dari modul Web dan modul EJB, file EAR juga dapat berisi modul konektor yang dikemas sebagai file RAR dan modul Klien yang dikemas sebagai file JAR.

Rutesh Makhijani
sumber
32
+1 karena jawaban ini menjelaskan mengapa Anda mungkin ingin menggunakan yang satu atau yang lain.
Jason Wheeler
7
@KNU ya, .jar, .wardan .earfile arsip zip sederhana, sehingga dapat dibuka oleh program yang dapat menangani file .zip biasa.
acdcjunior
41

perang - arsip web. Ini digunakan untuk menyebarkan aplikasi web sesuai dengan standar servlet. Ini adalah file jar yang berisi direktori khusus yang disebut WEB-INF dan beberapa file dan direktori di dalamnya (web.xml, lib, kelas) serta semua HTML, JSP, gambar, CSS, JavaScript, dan sumber daya lain dari aplikasi web

arsip perusahaan telinga. Ini digunakan untuk menyebarkan aplikasi perusahaan yang berisi EJB, aplikasi web, dan perpustakaan pihak ketiga. Ini juga merupakan file jar, ia memiliki direktori khusus bernama APP-INF yang berisi file application.xml, dan berisi file jar dan perang.

David Rabinowitz
sumber
maksud Anda META-INF bukan direktori APP-INF?
Zavael
26

File PERANG (arsip web) berisi file kelas servlet, JSP (halaman servlet Java), file HTML dan grafik, dan file pendukung lainnya.

File EAR (arsip perusahaan) berisi file PERANG bersama dengan file JAR yang berisi kode.

Mungkin ada hal-hal lain dalam file-file itu tetapi pada dasarnya dimaksudkan untuk apa yang terdengar seperti artinya: PERANG untuk hal-hal jenis web, EAR untuk hal-hal tipe perusahaan (PERANG, kode, konektor dkk).

paxdiablo
sumber
2
Dalam kasus saya, saya selalu menggunakan WAR dengan guci di folder WEB-INF / lib dan berfungsi. Jadi mengapa saya harus menggunakan arsip EAR?
swapyonubuntu
2
@swapyonubuntu, jika Anda hanya menggunakan satu aplikasi web (lebih khusus, konteks servlet tunggal), tidak ada yang salah dengan hanya melakukan file WAR. File EAR jauh lebih baik untuk aplikasi perusahaan yang ditiup penuh, termasuk yang memiliki banyak aplikasi web.
paxdiablo
1
Di era layanan-mikro ini, bukankah lebih masuk akal untuk membuat setiap WAR benar-benar terpisah dan digunakan secara terpisah alih-alih menggabungkannya menjadi EAR monolitik?
Sayo Oladeji
18

File JAR

File JAR (kependekan dari Java Archive) memungkinkan kombinasi beberapa file menjadi satu. File dengan '.jar'; ekstensi digunakan oleh pengembang perangkat lunak untuk mendistribusikan kelas Java dan berbagai metadata. Ini juga menyimpan perpustakaan dan file sumber daya, serta file aksesori (seperti file properti).

Pengguna dapat mengekstrak dan membuat file JAR dengan perintah '.jar' Java Development Kit (JDK). Alat ZIP juga dapat digunakan.

File JAR memiliki file manifes opsional. Entri dalam file manifes menentukan penggunaan file JAR. Spesifikasi kelas 'utama' untuk kelas file menunjukkan file sebagai program yang terpisah atau 'berdiri sendiri'.

File PERANG

File PERANG (atau arsip Aplikasi Web) dapat terdiri dari file XML (bahasa Markup extensible), kelas Java, serta halaman Server Java untuk keperluan aplikasi Internet. Ini juga digunakan untuk menandai perpustakaan dan halaman Web yang membentuk aplikasi Web. File dengan ekstensi '.war' berisi aplikasi Web untuk digunakan dengan kontainer server atau JSP (Java Server Page). Ini memiliki JSP, HTML (Hypertext Markup Language), JavaScript, dan berbagai file untuk membuat aplikasi Web yang disebutkan di atas.

File PERANG disusun sedemikian rupa untuk memungkinkan direktori dan file khusus. Mungkin juga memiliki tanda tangan digital (seperti halnya file JAR) untuk menunjukkan kebenaran kode.

File EAR

File EAR (Enterprise Archive) menggabungkan file JAR dan WAR menjadi satu arsip. File-file ini dengan ekstensi '.ear' memiliki direktori untuk metadata. Modul-modul tersebut dikemas dalam arsip untuk operasi yang lancar dan simultan dari berbagai modul dalam server aplikasi.

File EAR juga memiliki deskriptor penyebaran (yang merupakan file XML) yang secara efektif menentukan penyebaran modul yang berbeda.

masukkan deskripsi gambar di sini

Joby Wilson Mathews
sumber
1
harus menjadi jawaban teratas hanya untuk grafis yang luar biasa, terima kasih, sangat membantu!
fl0w
12

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

tar (tape archives) - Format yang digunakan adalah file yang ditulis dalam unit serial fileName, fileSize, fileData - tanpa kompresi. bisa sangat besar

Jar (arsip java) - teknik kompresi yang digunakan - umumnya berisi informasi java seperti file kelas / java. Tetapi dapat berisi file dan struktur direktori

war (arsip aplikasi web) - mirip seperti file jar hanya memiliki struktur direktori spesifik sesuai spesifikasi JSP / Servlet untuk tujuan penerapan

telinga (arsip perusahaan) - mirip seperti file jar. memiliki struktur direktori yang mengikuti persyaratan J2EE sehingga dapat digunakan pada server aplikasi J2EE. - Dapat berisi beberapa file JAR dan WAR

simpleDev
sumber
6

File telinga menyediakan lebih banyak opsi untuk mengkonfigurasi interaksi dengan server aplikasi.

Misalnya: jika versi hibernate dari server aplikasi lebih lama dari yang disediakan oleh dependensi Anda, Anda dapat menambahkan berikut ini ke ear-deployer-jboss-beans.xml untuk JBOSS untuk mengisolasi classloader dan menghindari konflik:

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

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

Ini akan memastikan bahwa tidak ada konflik classloader antara aplikasi Anda dan server aplikasi.

Biasanya mekanisme classloader bekerja seperti ini:

Ketika permintaan pemuatan kelas disajikan ke pemuat kelas, ia terlebih dahulu meminta pemuat kelas induknya untuk memenuhi permintaan. Orang tua, pada gilirannya, meminta induknya untuk kelas sampai permintaan mencapai puncak hierarki. Jika pemuat kelas di bagian atas hierarki tidak dapat memenuhi permintaan, maka pemuat kelas anak yang memanggilnya bertanggung jawab untuk memuat kelas.

Dengan mengisolasikan classloader, ear classloader Anda tidak akan terlihat pada induknya (= JBoss / classloader AS lainnya). Sejauh yang saya tahu, ini tidak mungkin dengan file perang.

Menandai
sumber
KNU: Penggunaan file telinga ini lebih valid daripada hanya menggunakannya karena "ini berisi file kelas Servlet, JSP FIles, file pendukung, file GIF dan HTML" sebagaimana dinyatakan dalam jawaban yang diterima. Karena file perang juga dapat berisi gif, html, jsp, servlets, ... Jika semua orang "menjawab kekuatannya", mungkin kita semua bisa menjadi lebih bijak dengan masalah yang dihadapi.
Tandai
Maven melakukan itu untukmu, tidak? Anda dapat menentukan dependensi per versi dan mereka disertakan di folder / lib. (dalam file perang)
Sebas
Ya, tetapi server aplikasi / server servlet dapat memilih untuk menimpanya di folder lib dengan lib yang ia sediakan di folder lib sendiri. Ini bisa mencegahnya. Itu semua tergantung pada mekanisme classloading yang digunakan.
Tandai
6

J2EE mendefinisikan tiga jenis arsip:

  1. Java Archives (JAR) File JAR merangkum satu atau lebih kelas Java, manifes, dan deskriptor. File JAR adalah tingkat arsip terendah. File JAR digunakan dalam J2EE untuk mengemas EJB dan Aplikasi Java sisi klien.

  2. Arsip Web (PERANG) File PERANG mirip dengan file JAR, kecuali bahwa itu khusus untuk aplikasi web yang terbuat dari Servlet, JSP, dan kelas pendukung.

  3. Enterprise Archives (EAR) ”File EAR berisi semua komponen yang membentuk aplikasi J2EE tertentu.

pengguna1884500
sumber
0

Untuk membuat transportasi proyek, penyebaran menjadi mudah. perlu dikompresi menjadi satu file. Kelompok file JAR (arsip java) .class

PERANG (arsip web) - setiap perang mewakili satu aplikasi web - hanya menggunakan teknologi terkait web seperti servlet, jsps dapat digunakan. - dapat berjalan di server Tomcat - aplikasi web yang dikembangkan oleh teknologi terkait web hanya jsp servlet html js - representasi info hanya tanpa transaksi.

EAR (arsip perusahaan) - masing-masing telinga mewakili satu aplikasi perusahaan - kita bisa menggunakan apa saja dari j2ee seperti ejb, jms bisa digunakan dengan senang hati. - dapat berjalan di Glassfish seperti server tidak di server Tomcat. - Aplikasi perusahaan yang dikembangkan oleh teknologi apa pun dari j2ee seperti semua aplikasi web plus ejbs jms dll. - Melakukan transaksi dengan representasi info. misalnya. Aplikasi bank, aplikasi Telecom

Ashish Kamble
sumber