3.

Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法

編集
この記事の要点
  • Eclipse のサーバービューで Tomcat にプロジェクトを追加できないときに出やすいエラー
  • 主因は「動的 Web モジュール」ファセットが付いていないこと(通常の Java プロジェクトとして作ってしまった場合に発生)
  • 対処: プロジェクトのプロパティ→プロジェクト・ファセットで「Java」と「動的 Web モジュール」を有効化、Targeted Runtime に Tomcat を関連付ける
  • Maven / Gradle プロジェクトでは m2e-wtp や Gradle 用 Eclipse 設定の再生成も必要なことがある

 

エラー内容

サーバーに追加または除去できるリソースがありません。

# 英語版
There are no resources that can be added or removed from the server.

このエラーの意味

Eclipse の「サーバー」タブで Tomcat にプロジェクトを追加しようとしたときに、そのプロジェクトが Tomcat に載せられる Web アプリとして認識されていない場合に出やすいエラーです。

起きやすい原因

  • プロジェクトに動的 Web モジュールの facet が付いていない
  • Tomcat をTargeted Runtime として関連付けていない
  • Java / Servlet / Tomcat の組み合わせが合っていない
  • Maven / Gradle プロジェクトが WTP と正しく連携していない
  • Server view 側のキャッシュが壊れている

確認すること

1. プロジェクト・ファセットを確認

プロジェクトを右クリック → プロパティプロジェクト・ファセット

  • Java にチェックが入っているか
  • 動的 Web モジュール にチェックが入っているか
  • バージョンが使いたい Tomcat と合っているか(次の表参照)

2. Targeted Runtimes を確認

同じプロパティ画面の Targeted Runtimes で対象 Apache Tomcat にチェックが入っているか。

Tomcat ↔ Servlet API ↔ Dynamic Web Module バージョン対応表

Tomcat バージョンServlet APIJSPDynamic Web Module必要 Java
Tomcat 73.02.23.0Java 6+
Tomcat 8.03.12.33.1Java 7+
Tomcat 8.5 / 9.03.1 / 4.02.3 / 2.33.1 / 4.0Java 7+ / Java 8+
Tomcat 10.05.0 (jakarta)3.05.0Java 8+
Tomcat 10.16.0 (jakarta)3.16.0Java 11+
Tomcat 11.06.1 (jakarta)4.06.0Java 17+

重要: Tomcat 10 以降は javax.servletjakarta.servlet にパッケージが変わります(Jakarta EE 移行)。古いコードは Tomcat 9 まで、新規開発は Tomcat 10+ + Jakarta が推奨。

対処手順(標準)

  1. プロジェクト右クリック → プロパティ
  2. プロジェクト・ファセット を開く
  3. Java動的 Web モジュール にチェック
  4. Runtimes / Targeted Runtimes で対象 Tomcat にチェック
  5. 必要なら web.xml デプロイメント記述子の生成 を有効に
  6. Server view から一度プロジェクトを外し、再度追加
  7. うまく行かない場合はプロジェクト → クリーン

Maven プロジェクトで直らない場合

Maven プロジェクトは WTP 連携が不十分だと facet が機能しません。


war


    
    
        jakarta.servlet
        jakarta.servlet-api
        6.0.0
        provided
    
    
    



    myapp
    
        
            maven-war-plugin
            3.4.0
            
                false
            
        
    

Eclipse 側の対応:

  1. m2e-wtp プラグインが入っているか確認
  2. プロジェクト右クリック → Maven → プロジェクトの更新(または Alt+F5)
  3. 更新ダイアログで「リソースの強制更新」「ワークスペース解決」にチェック
  4. もう一度プロジェクト・ファセットを開いて状態確認

Gradle プロジェクトで直らない場合

// build.gradle
plugins {
    id "war"
    id "eclipse-wtp"  // ← WTP 連携プラグイン
}

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

eclipse {
    wtp {
        component {
            contextPath = "/myapp"
        }
        facet {
            facet name: "jst.web", version: "6.0"
            facet name: "java", version: "17"
        }
    }
}
# Eclipse 用設定再生成
$ ./gradlew cleanEclipse eclipse

# 生成後、Eclipse で「ファイル → 既存プロジェクトをインポート」

それでも直らない時の確認順

  1. そのプロジェクトは本当に Web アプリとして動かす構成か(pom.xml の packaging=war 等)
  2. Targeted Runtime に Tomcat が設定されているか
  3. facet と Tomcat のバージョンが噛み合っているか(上の対応表参照)
  4. Eclipse のキャッシュや Server 設定が壊れていないか
    • Servers ビューから Tomcat を一度削除して再作成
    • ワークスペースの .metadata 関連設定が壊れていないか
  5. Java と Tomcat のバージョン互換性(Tomcat 11 で Java 8 は動かない等)

まとめ

このエラーは、Tomcat 側の問題というより、Eclipse がそのプロジェクトを配備可能な Web アプリと認識できていないときに起きます。流れとしては:

  1. Project Facets で「動的 Web モジュール」を有効化
  2. Targeted Runtimes で対象 Tomcat を選択
  3. バージョン整合性を確認(Tomcat ↔ Servlet API ↔ Java ↔ Dynamic Web Module)
  4. Maven / Gradle なら IDE 連携プラグインの設定

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. モジュール名が無効です。(WAR エクスポート)
  2. 現在のブランチはプル用に構成されていません 構成にキー remote.origin.url の値がありません
  3. サーバーに追加または除去できるリソースがありません。
  4. invalid LOC header (bad signature)