タイトル: サーバーに追加または除去できるリソースがありません。
SEOタイトル: 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 API | JSP | Dynamic Web Module | 必要 Java |
|---|---|---|---|---|
| Tomcat 7 | 3.0 | 2.2 | 3.0 | Java 6+ |
| Tomcat 8.0 | 3.1 | 2.3 | 3.1 | Java 7+ |
| Tomcat 8.5 / 9.0 | 3.1 / 4.0 | 2.3 / 2.3 | 3.1 / 4.0 | Java 7+ / Java 8+ |
| Tomcat 10.0 | 5.0 (jakarta) | 3.0 | 5.0 | Java 8+ |
| Tomcat 10.1 | 6.0 (jakarta) | 3.1 | 6.0 | Java 11+ |
| Tomcat 11.0 | 6.1 (jakarta) | 4.0 | 6.0 | Java 17+ |
重要: Tomcat 10 以降は javax.servlet → jakarta.servlet にパッケージが変わります(Jakarta EE 移行)。古いコードは Tomcat 9 まで、新規開発は Tomcat 10+ + Jakarta が推奨。
対処手順(標準)
- プロジェクト右クリック → プロパティ
- プロジェクト・ファセット を開く
- Java と 動的 Web モジュール にチェック
- Runtimes / Targeted Runtimes で対象 Tomcat にチェック
- 必要なら web.xml デプロイメント記述子の生成 を有効に
- Server view から一度プロジェクトを外し、再度追加
- うまく行かない場合はプロジェクト → クリーン
Maven プロジェクトで直らない場合
Maven プロジェクトは WTP 連携が不十分だと facet が機能しません。
war
jakarta.servlet
jakarta.servlet-api
6.0.0
provided
myapp
maven-war-plugin
3.4.0
false
Eclipse 側の対応:
- m2e-wtp プラグインが入っているか確認
- プロジェクト右クリック → Maven → プロジェクトの更新(または Alt+F5)
- 更新ダイアログで「リソースの強制更新」「ワークスペース解決」にチェック
- もう一度プロジェクト・ファセットを開いて状態確認
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 で「ファイル → 既存プロジェクトをインポート」
それでも直らない時の確認順
- そのプロジェクトは本当に Web アプリとして動かす構成か(pom.xml の packaging=war 等)
- Targeted Runtime に Tomcat が設定されているか
- facet と Tomcat のバージョンが噛み合っているか(上の対応表参照)
- Eclipse のキャッシュや Server 設定が壊れていないか
- Servers ビューから Tomcat を一度削除して再作成
- ワークスペースの
.metadata関連設定が壊れていないか
- Java と Tomcat のバージョン互換性(Tomcat 11 で Java 8 は動かない等)
まとめ
このエラーは、Tomcat 側の問題というより、Eclipse がそのプロジェクトを配備可能な Web アプリと認識できていないときに起きます。流れとしては:
- Project Facets で「動的 Web モジュール」を有効化
- Targeted Runtimes で対象 Tomcat を選択
- バージョン整合性を確認(Tomcat ↔ Servlet API ↔ Java ↔ Dynamic Web Module)
- Maven / Gradle なら IDE 連携プラグインの設定