EARファイル・WARファイル・JARファイルの違い

(1) EARファイル・WARファイル・JARファイルの違いや特徴について

タイトルの通り、Javaのモジュールをパッケージした形式であるEAR・WAR・JARの違いについてご紹介します。

EAR・WAR・JARはいずれもJava関連のモジュールを「デプロイ可能な単位」に固めたもので、この形式でJBossやTomcatといったアプリケーションサーバに配備して稼働させる事が可能になります。しかし、それぞれデプロイ対象の資産の内容や、配備先のサーバ種類が異なったりしています。

違いを理解するために、最初にそれぞれの概要について簡単に見ていきます。また図を使って、EARやWARやJARが全体像のどこに関連する資源なのか?も図示していきます。

(図100)

(1-1) JARファイルとは(.jar)

JARファイルはJavaのクラスファイル等を纏めて固めた資源で「.jar」の拡張子を持ちます。
その中でも「EJB-JAR」は特殊なJARの形式で、EJB(Enterprise Java Beans)のモジュール(クラスファイル)とEJBデプロイメントディスクリプタ(xml形式の定義ファイル)とをセットで拡張子「.jar」で固めたものです。
(表)
JAR
(EJB-JARの場合)
配備対象 ●配備対象
EJBを固めた特殊なJarファイル(※注1)の場合、「EJBコンテナ」にデプロイします。●概要
EJBコンテナはJARファイルを通じてEJBに対するアクセスを提供します。またEJBを他の部品と分離する役目も果たします。(※注1)
EJB-JARはJava EEの仕様で定義された特殊なJarファイルの一種で「.jar」型の拡張子を持ちます。
動作環境 ・JREが必要
資産 下記のような資産を集めて「.jar」形式に固める(例)
・Javaクラスファイル
・その他データ
(処理に必要なメタデータ、テキスト、画像等)
デプロイメントディスクリプタの名前 ・「META-INF」配下に「ejb-jar.xml」を配備
表の通り、EJB-JARは「EJBコンテナ」上にデプロイされます。
(図111)

 

 

(1-2) WARファイル(.war)

WARは「Web application ARchive」または「Web Application Resource」の略でWebアプリを構成するモジュールを固めたファイルになります。具体的にはサーブレットのクラスファイル(.class)やJSPファイル、HTMLといったWebアプリの資産がJARファイルとして「.war」の拡張子で固められます。
(表)
WAR
配備対象 ●配備対象
「Webコンテナ」(≒Servletコンテナ)にデプロイします。●概要
WebコンテナはJavaの「JSP」や「Servlet」を固めたWARファイルでデプロイして、WebアプリのHTTPリクエスト/レスポンスの制御を提供します。●(例)代表的なサーブレットコンテナ
・Tomcat
・Jetty
動作環境 ・Java EE(一部=Web Profile)が必要
⇒(例)Tomcat、Jettyなど
資産 下記のような資産を集めて「.war」形式に固める
(例)
・JARファイル
・JSP
・Servlet
・XML
・HTML
デプロイメントディスクリプタの名前 ・WEB-INF配下に「web.xml」を配備
表の通り、WARファイルは「サーブレットコンテナ」などにデプロイされます。
(図121)

 

(1-3) EARファイルとは(.ear)

EARは「Enterprise Archive」の略で、1個~複数個の「.jar」や「.war」を集めて「.ear」の拡張子で固めたものになります。
(表)
EAR
配備対象 ●配備対象
「アプリケーションサーバ」にデプロイします。●概要
「アプリケーションサーバ」は1個~複数個のWARファイルやEJB-JARファイルを集めて1つに固めたものになります。●(例)代表的なアプリケーションサーバ
・WebSphere(IBM)
・WebLogic(Oracle)
・JBoss
・GlassFish
動作環境 ・Java EE(全部)が必要
⇒(例)Jboss、WebSphere、WebLogic、GlassFishなど(備考)
Java EE以外でも、Jakarta EE及びその互換製品でも実行可能
資産 EARファイルやJARファイルを1個~複数個集めて「.ear」で固めたもの(例)
・EARファイル
・JARファイル
デプロイメントディスクリプタの名前 ・META-INF配下に「application.xml」を配備
表の通り、EARファイルは「アプリケーションサーバ」などにデプロイされます。
(図131)

 

(1-4) まとめ(三者の違い)

●デプロイに必要な環境

一番大きな違いは「それぞれが異なる実行環境にデプロイされる」という点です。例えば、JARファイルはJREがある環境で動作するし、WARならJREに加えてTomcat等のサーブレットコンテナも必要ですし、EARなら更にEJBコンテナも含んだ「アプリケーションサーバ」(WebLogic等)が必要となります。

 

●機能的な違い

WARファイルはWebアプリに必要なJSPやサーブレットといった部品を固めたものである一方、JARは通常のクラスファイルやEJBを集めて固めたもの、EARはその両者をセットで固めたもの、といった役割が異なっています。

参照先:
https://rainbow-engine.com/ear-jar-war-difference/#:~:text=WAR%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AFWeb%E3%82%A2%E3%83%97%E3%83%AA,%E5%BD%B9%E5%89%B2%E3%81%8C%E7%95%B0%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82