WARとEARの違いとは?Jakarta EEでの構築と自動配置の基本をマスターしよう
生徒
「Jakarta EEでWARとかEARってよく聞くんですけど、違いとか使い分けってあるんですか?」
先生
「いい質問ですね。WARとEARは、Jakarta EEでのアプリケーション配布形式の違いを表しています。それぞれの役割と構成の特徴を理解することで、自動構築や自動デプロイの流れも見えてきますよ。」
生徒
「それってMavenとかGradleでも設定できるんですか?」
先生
「もちろんです。Jakarta EEではビルドツールと連携して、WARやEARを自動生成し、そのままサーバーに自動配置することも可能です。では、WARとEARの違いから順番に見ていきましょう。」
1. WARとEARの違いを理解しよう
Jakarta EEのアプリケーションを配布する際には、主に2つの形式があります。それがWAR(Web Application Archive)とEAR(Enterprise Application Archive)です。
WARファイルは、主にServletやJSP、REST APIなどのWebアプリケーションで使用され、WEB-INF配下にweb.xmlやclasses、libが配置されます。
EARファイルは、EJB(Enterprise Java Beans)や複数のWARを統合するような大規模なエンタープライズアプリケーションで用いられ、application.xmlを中心に、.warや.jarファイルを一括で含みます。
要するに、WARは単独でWebアプリケーションを動かす形式、EARは複数モジュールを統合管理するパッケージです。
2. Jakarta EEでWAR構成を作る基本
WARファイルは、Jakarta EEでWebアプリケーションを構成する上での基本です。Mavenを使えば、自動的にwarパッケージを作成できます。プロジェクトの構成は以下のようになります。
my-webapp/
├── src/
│ └── main/
│ ├── java/
│ ├── resources/
│ └── webapp/
│ └── WEB-INF/
│ └── web.xml
├── pom.xml
pom.xmlには<packaging>war</packaging>と指定することで、MavenがWARをビルドします。
3. EAR構成で大規模アプリを構築
EARは複数のWARやJARモジュールを統合するため、Mavenではearモジュールを親プロジェクトとして設定します。
例えば、以下のようなマルチモジュール構成にすることで、アプリ全体をEARとしてまとめることができます。
enterprise-app/
├── web-module/ (WAR)
├── ejb-module/ (JAR)
├── ear-module/ (EAR)
│ └── application.xml
├── pom.xml
EARはapplication.xmlを使って各モジュールの定義を行い、Jakarta EEのアプリケーションサーバー(例:Payara, WildFly)に一括でデプロイできます。
4. MavenでWAR/EARのビルドを自動化する
WARやEARの構築は手作業でも可能ですが、Mavenのビルドプロセスを使えば自動化できます。
WARなら、Mavenプロジェクトのpom.xmlに次のような記述を追加するだけで、ビルド時に自動生成されます。
<packaging>war</packaging>
EARの場合は、maven-ear-pluginを使用して以下のように定義します。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<defaultLibBundleDir>lib</defaultLibBundleDir>
</configuration>
</plugin>
これにより、コマンドひとつでEARファイルを生成できます。
5. Jakarta EEサーバーへの自動デプロイ
ビルドされたWARやEARをJakarta EEのアプリケーションサーバーに自動配置することも可能です。たとえば、Payara Serverではautodeployフォルダに配置するだけでアプリケーションが展開されます。
GradleやMavenと連携して、この配置処理も自動化することができます。
例:MavenでPayaraに自動配置
<plugin>
<groupId>fish.payara.maven.plugins</groupId>
<artifactId>payara-micro-maven-plugin</artifactId>
<version>1.0.5</version>
<configuration>
<deployWar>true</deployWar>
<artifact>${project.build.finalName}.war</artifact>
</configuration>
</plugin>
これで、mvn payara-micro:startを実行すれば、WARがサーバーにデプロイされ起動まで自動化できます。
6. WARとEARの使い分けとベストプラクティス
基本的に、小規模~中規模のアプリケーションではWAR形式で十分です。シンプルで管理が楽だからです。
一方、大規模システムや複数モジュールを一括管理したい場合にはEARが適しています。
現在のJakarta EEではモジュール分離やクラウドネイティブなアプローチが主流となりつつあるため、EARの使用頻度は減ってきているものの、レガシーシステムの保守や移行時には理解が不可欠です。
7. Jakarta EEでのCI/CDに向けた第一歩
WARやEARのビルドと自動デプロイの流れを理解することで、Jakarta EEのCI/CD(継続的インテグレーション・継続的デリバリー)へとステップアップできます。
JenkinsなどのCIツールと組み合わせることで、ビルドからテスト、サーバーへの配置まで全てを自動化できます。
これにより、Jakarta EEのプロジェクト管理や運用が効率化され、開発速度と品質が大幅に向上します。