◀ 3.

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

▶
この記事の要点
  • Eclipse のサーバービューで Tomcat にプロジェクトを追加できないときに出やすいエラー
  • 候補の一つは「動的 Web モジュール」ファセットの不足。サーバー種別に適合するモジュールだけが候補に出るため、runtime と WTP の対応も確認する
  • 対処: プロジェクトのプロパティ→プロジェクト・ファセットで「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 アプリとして認識されていない場合に出やすいエラーです。これは Eclipse / WTP の追加候補の判定であり、Tomcat の起動失敗や HTTP エラーそのものではありません。

起きやすい原因

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

確認すること

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

元のファセット画面ではJava 1.8・動的Webモジュール4.0と「より詳しい構成が使用可能」が写っています。利用環境の設定値をこの画像へ無条件に合わせず、対象runtimeとの対応を確認します。

参考画像

プロジェクトを右クリック → プロパティ → プロジェクト・ファセット。この項目や動的 Web モジュールが見当たらない場合は、使用中の Eclipse に Java Web 開発用 WTP と対象 Tomcat のサーバーアダプターがあるか、プロジェクトが facet 対応の Web プロジェクトかを先に確認します。通常の Java プロジェクトに無条件でチェックを追加できるとは限りません。

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

2. Targeted Runtimes を確認

同じプロパティ画面の Targeted Runtimes で対象 Apache Tomcat にチェックが入っているか。通常は facet と互換のある runtime だけが表示されます。Show all runtimes で非互換のものが灰色表示になる場合、チェックを強制するのではなく facet / runtime / アダプターの対応を確認します。

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.0Servlet 6.1 に対する WTP / アダプターの対応を確認(6.0 固定ではない)Java 17+

重要: Tomcat 10 以降は javax.servlet → jakarta.servlet にパッケージが変わります(Jakarta EE 移行)。上表の Servlet / JSP / Java はコンテナ仕様で、すべての Eclipse / WTP で同じ facet を選べる保証ではありません。Tomcat 7 / 8.0 / 8.5 / 10.0 はサポート終了版の互換性参照です。既存アプリの名前空間・依存API・配備形式に合わせて確認し、エラー解消のためだけに依存やコンテナを一律更新しないでください。

対処手順(標準)

  1. プロジェクト右クリック → プロパティ
  2. プロジェクト・ファセット を開く
  3. Java と 動的 Web モジュール にチェック
  4. Runtimes / Targeted Runtimes で対象 Tomcat にチェック
  5. 必要なら web.xml デプロイメント記述子の生成 を有効に。アノテーションで宣言する構成等では web.xml は必須ではなく、生成するだけで配備候補になる保証もない
  6. Server view から一度プロジェクトを外し、再度追加
  7. うまく行かない場合はプロジェクト → クリーン

元の追加構成画面です。コンテキストルート・コンテンツディレクトリーとweb.xml生成の選択を確認できます。web.xmlは構成によって任意で、この画像はエラー画面ではありません。

参考画像

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

Maven プロジェクトは WTP 連携とビルド定義の整合を確認します。次は既存の WAR 用設定例で、Servlet API 6.0.0 は Tomcat 10.1 世代の例、コメント内の javax.servlet-api 4.0.1 は Tomcat 9 世代の別候補です。両者を混在させたり、既存 pom.xml を丸ごと置き換えたりしません。実行可能 JAR を Eclipse の Tomcat へ追加するためだけに war 化する手順でもなく、依存・プラグインの更新指示ではありません。

<!-- pom.xml -->
<packaging>war</packaging>

<dependencies>
    <!-- Servlet API は provided (Tomcat が提供) -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>6.0.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- 古い javax の場合 -->
    <!--
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    -->
</dependencies>

<build>
    <finalName>myapp</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.4.0</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

Eclipse 側の対応:

  1. 使用中の m2e / WTP の Web プロジェクト連携を確認(m2e-wtp は m2e への統合が承認されており、旧独立プロジェクトの名前だけで不足と断定しない)
  2. プロジェクト右クリック → Maven → プロジェクトの更新(または Alt+F5)
  3. 更新ダイアログの項目は使用版で確認する。snapshot / release の強制更新は通常のプロジェクト同期とは別で、一律に有効化しない
  4. もう一度プロジェクト・ファセットを開いて状態確認

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

次の旧例は WAR と Servlet API 6.0、Java 17 の facet を前提とする設定の抜粋です。Tomcat と WTP の対応を確認し、既存の依存定義を自動変更する解決手順として転記しないでください。

// 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"
        }
    }
}

次の旧コマンドの cleanEclipse は .project / .classpath / WTP の生成設定等を削除してから再生成します。既存の手動設定を退避せずに実行しないでください。Buildship で管理しているプロジェクトの同期と生成ファイル方式は同じではありません。使用中の Gradle / Buildship と既存の取り込み方法を確認し、このコマンドを必須の修復手順にしません。

# Eclipse 用設定再生成
$ ./gradlew cleanEclipse eclipse

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

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

  1. そのプロジェクトは本当に Web アプリとして動かす構成か(pom.xml の packaging=war 等)
  2. Targeted Runtime に Tomcat が設定されているか
  3. facet と Tomcat のバージョンが噛み合っているか(上の対応表参照)
  4. Eclipse のキャッシュや Server 設定が壊れていないか
    • Servers ビューの Tomcat 定義・関連付け・エラーログを確認。再作成は必要性を絞り、既存設定と配備情報を退避できる場合に検討する(実 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 連携プラグインの設定

📸 参考画像

元の公開画像は上のファセット確認とWebモジュールの追加構成へ交えて掲載しています。画像だけでEclipseの版は確定できず、現在の全環境で同じ表示になるとは限りません。

関連記事

公式仕様の確認先:Eclipse WTPのfacet、Tomcat対応仕様、Gradle Eclipse plugin(2026-10-28確認)。画面・設定・コードは対象版と各例の前提条件を照合してください。

子ページ

子ページはありません

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

最近更新/作成されたページ