カテゴリ: Jakarta EE 更新日: 2026/01/28

Jakarta EEと依存解決のトラブル対処法|Maven・Gradleでのエラーを完全攻略

Jakarta EEと依存解決トラブルシューティング
Jakarta EEと依存解決トラブルシューティング

先生と生徒の会話形式で理解しよう

生徒

「Jakarta EEのプロジェクトをMavenでビルドしようとしたら、依存関係のエラーが出ました…。どうすれば直るんですか?」

先生

「それはよくある悩みですね。Jakarta EEはモジュールが多いため、依存関係の設定ミスや衝突が原因でビルドエラーが発生しやすいです。」

生徒

「初心者には難しく感じます…。何を確認すれば良いのか、順を追って教えてください!」

先生

「わかりました。今回はJakarta EEの依存トラブルの原因と、その解決方法について丁寧に解説していきましょう。」

1. Jakarta EEと依存関係の基本知識

1. Jakarta EEと依存関係の基本知識
1. Jakarta EEと依存関係の基本知識

Jakarta EEでは、サーブレット・JSP・JAX-RS・JSFなど複数の仕様をサポートするライブラリがあり、プロジェクトではそれらをビルドツール(MavenやGradle)で管理します。依存関係の記述を間違えると、クラスが見つからないライブラリのバージョンが衝突するといったエラーが発生します。

特に、Jakarta EE 8からJakarta EE 9への移行でjavaxパッケージがjakartaに変更されたことが、多くの依存関係トラブルの原因になっています。

2. Mavenでの依存関係トラブルと対処法

2. Mavenでの依存関係トラブルと対処法
2. Mavenでの依存関係トラブルと対処法

MavenでJakarta EEのプロジェクトをビルドする際によく発生するエラーには以下のようなものがあります。

  • 依存ライブラリが解決できない
  • 同じクラスが複数のJarに存在して競合
  • Jakarta EE 8と9のクラス名衝突

以下は正しい依存設定の例です(Jakarta EE 10でServlet APIを使用する場合)。


<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
</dependency>

ポイントは、scopeprovidedにすること。サーバー側(例:PayaraやWildFly)がライブラリを提供するため、重複するとエラーになります。

3. Gradleでの依存エラーの回避法

3. Gradleでの依存エラーの回避法
3. Gradleでの依存エラーの回避法

GradleではMavenと同様に依存を管理しますが、記述方法が異なります。以下はServlet APIを導入する例です。


dependencies {
    providedCompile 'jakarta.servlet:jakarta.servlet-api:6.0.0'
}

GradleではprovidedCompileのようなスコープ指定がデフォルトで存在しないため、warプラグインの導入が必要な場合もあります。


apply plugin: 'war'

Gradleでの依存解決エラーの対処には、バージョンの明記不要な依存の排除dependencyInsightの活用が有効です。

4. Jakarta EEの依存衝突のよくある原因

4. Jakarta EEの依存衝突のよくある原因
4. Jakarta EEの依存衝突のよくある原因

Jakarta EEでは以下のような依存トラブルが特に頻出します。

  • 旧javaxと新jakartaの混在
  • 重複した依存(例:jakarta.servlet-apiとjavax.servlet-apiの併用)
  • サーバーが提供するライブラリをローカルでも指定している
  • Transitive Dependencies(間接的な依存)によるバージョン競合

このような問題を避けるには、以下のチェックが有効です。

  • mvn dependency:treegradle dependencies で依存構成を確認
  • Jakarta EEのバージョンを統一して管理する(Bill of Materialsの活用)

5. Jakarta EEにおけるBOM(Bill of Materials)の活用

5. Jakarta EEにおけるBOM(Bill of Materials)の活用
5. Jakarta EEにおけるBOM(Bill of Materials)の活用

Jakarta EEの各ライブラリは個別にバージョン管理されていますが、それを一元化するのがBOMです。以下はMavenの例です。


<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>jakarta.platform</groupId>
      <artifactId>jakarta.jakartaee-bom</artifactId>
      <version>10.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

この設定により、他のJakarta EEモジュールを個別にバージョン指定せずに利用できます。

6. Jakarta EEの依存解決エラーの実例とデバッグ手順

6. Jakarta EEの依存解決エラーの実例とデバッグ手順
6. Jakarta EEの依存解決エラーの実例とデバッグ手順

例えば、以下のようなエラーが表示されたとします。


java.lang.ClassNotFoundException: jakarta.servlet.http.HttpServlet

この場合は、Servlet APIの依存が設定されていない、あるいはprovidedスコープを忘れてruntimeなどにしてしまったことが原因です。

また、エラー文中に「javax.servlet」と出ているなら、古い依存が混入している可能性もあります。dependency:treeで親ライブラリからの伝播を確認しましょう。

7. Jakarta EEと依存の相性をよくする設計のポイント

7. Jakarta EEと依存の相性をよくする設計のポイント
7. Jakarta EEと依存の相性をよくする設計のポイント

Jakarta EEのプロジェクトでは、以下のような設計の工夫も重要です。

  • Jakarta EEのバージョンをプロジェクト開始時に明確にする
  • 依存の追加時には毎回dependency:treeで構成を確認する
  • IDEのビルドキャッシュやローカルリポジトリを定期的にクリアする
  • サーバー(Payara, WildFly)と依存ライブラリの対応表を確認する

特に初心者は、手動でライブラリを追加せず、スターターの雛形を活用するのがおすすめです。

カテゴリの一覧へ
新着記事
New1
Jakarta EE
Jakarta EEとクラウドネイティブ開発の相性とは?初心者向けにわかりやすく解説
New2
Jakarta EE
JakartaEE JSPのリクエスト属性とスコープの基本を徹底解説!初心者向け入門ガイド
New3
Play Framework
Play Frameworkのビューテストを徹底解説!Twirlテンプレートの品質を高める方法
New4
Jakarta EE
JakartaEE フィルタで認証と認可を実装する方法を初心者向けに解説!サーブレットのセキュリティ入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Play Framework
Play Frameworkのビューを共通化!テンプレート間のインクルード方法を徹底解説
No.3
Java&Spring記事人気No3
Play Framework
Play Frameworkプロジェクト作成直後にやるべき初期設定ガイド!初心者でも安心
No.4
Java&Spring記事人気No4
Play Framework
Play Frameworkで多言語対応(i18n)を徹底解説!Twirlテンプレートでの使い方
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EEの標準仕様とAPI一覧を完全解説!初心者でもわかるエンタープライズJavaの基本
No.7
Java&Spring記事人気No7
Play Framework
Play FrameworkでCSSやJavaScriptを読み込む方法を徹底解説!静的リソースの組み込みガイド
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識