タイトル: ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません。ビルド・パスを修正してから、プロジェクトの取り消しおよび再ビルドを行ってください。
SEOタイトル: Eclipse「org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません」対処
| この記事の要点 |
|
エラーの状況
Eclipse で動的 Web プロジェクト(Dynamic Web Project)を開いたときに、問題ビューに以下のエラーが表示されます:
Description: ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。
org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません。
ビルド・パスを修正してから、プロジェクトの取り消しおよび再ビルドを行ってください。
Resource: (project name)
Path: (project path)
Location: 不明
Type: Java の問題
Eclipse が InstanceManager クラスを見つけられず、プロジェクト全体のビルドが失敗している状態です。同時に「型 org.apache.tomcat.InstanceManager を解決できません」が複数の Servlet クラスで出ます。
原因
org.apache.tomcat.InstanceManager は Tomcat のランタイム jar に含まれるクラスです(実体は $CATALINA_HOME/lib/tomcat-api.jar または tomcat-util.jar)。Eclipse は動的 Web プロジェクトに「ターゲット・ランタイム」として Tomcat を関連付けることで、このクラスをクラスパスに通します。
このエラーは以下の状況で発生:
- git clone した他人のプロジェクトを初めて開いたとき(最頻出)
- Eclipse に Tomcat ランタイムを登録していない
- 登録済み Tomcat のパスが無効(フォルダ移動・削除)
- プロジェクトのターゲット・ランタイムが選択されていない
- ワークスペースを別 PC からコピーしてきたとき
対処1: ターゲット・ランタイムを設定
プロジェクトを右クリックして プロパティ → ターゲット・ランタイムを開き、Tomcat にチェックを入れます。
| 手順 | 操作 |
|---|---|
| 1 | プロジェクト右クリック → プロパティ (Properties) |
| 2 | 左ペインから ターゲット・ランタイム (Targeted Runtimes) を選択 |
| 3 | 表示されている Tomcat (Apache Tomcat v9.0 など) にチェック |
| 4 | 適用して閉じる |
| 5 | プロジェクト右クリック → Maven → プロジェクトの更新 (Maven プロジェクトの場合) |
| 6 | プロジェクト右クリック → クリーン → ビルド |
対処2: ランタイム自体が登録されていない場合
「ターゲット・ランタイム」のリストが空、または Tomcat が表示されない場合は、Eclipse 側に Tomcat ランタイムを先に登録します。
ウィンドウ (Window) → 設定 (Preferences)
→ サーバー (Server)
→ ランタイム環境 (Runtime Environments)
→ 追加 (Add...) を押す
→ Apache → Apache Tomcat v9.0 (使うバージョン) を選択
→ 「次へ」
→ Tomcat installation directory にインストール先を指定
例: C:\apache-tomcat-9.0.85
Mac: /usr/local/Cellar/tomcat@9/9.0.85/libexec
→ JRE を選択
→ 「完了」
追加後、プロジェクトのプロパティに戻って先ほどの「対処1」を実行します。
対処3: Tomcat フォルダを移動した場合
「ランタイム環境」に Tomcat はあるけれど、Tomcat フォルダ自体を移動・削除した場合は、登録済み Tomcat の「編集 (Edit)」からインストールパスを正しいパスに直します。
確認
対処後、プロジェクトのプロパティ → Java のビルド・パス → ライブラリーを開くと、Apache Tomcat の jar 群が読み込まれていることを確認できます。Servlet クラスを開いて import org.apache.tomcat.InstanceManager; がエラーにならなければ解決です。
関連
- 同じ原因で「型
org.apache.tomcat.InstanceManagerを解決できません」も同時に発生する - Maven プロジェクトなら
pom.xmlのに Servlet API がprovidedスコープで入っていることを確認 - Gradle なら
compileOnly 'jakarta.servlet:jakarta.servlet-api:6.0.0'相当
サーバービュー側からの確認
Eclipse 下部の サーバービュー (Servers) でも切り分けが可能です。表示されていない場合は ウィンドウ → ビューの表示 → サーバーで開きます。
- サーバービューに登録された Tomcat が 「停止」状態ならまだ問題ない
- サーバービュー自体が空なら 右クリック → 新規 → サーバーから追加
- 追加した Tomcat に右クリック → 追加と除去でプロジェクトをサーバーに登録
- サーバービューで Tomcat をダブルクリック → サーバーの場所が「Use Tomcat installation」になっていれば本物の Tomcat が使われる
Maven プロジェクトの場合
Maven プロジェクトでも同じ症状が出ます。pom.xml に Servlet API 依存を provided スコープで追加することでも代替可能です(Tomcat ランタイム関連付けと同等の効果):
jakarta.servlet
jakarta.servlet-api
6.0.0
provided
javax.servlet
javax.servlet-api
4.0.1
provided
provided スコープにすることで、デプロイ時には Tomcat 側の jar が使われ、ビルド時のみクラスパスに含まれるようになります(重複起因のエラーを避けられます)。
解決後に何度も再発する場合
| 症状 | 確認ポイント |
|---|---|
| Eclipse を再起動すると再発 | ワークスペースの破損 — 別ワークスペースで開き直す |
| 特定プロジェクトだけ再発 | .project / .classpath が古い → 削除して「Maven プロジェクトとしてインポート」 |
| 全プロジェクトで再発 | Eclipse のキャッシュ破損 — workspace/.metadata/ を退避してから再起動 |
| Servlet 5.x プロジェクトで発生 | Tomcat 10 系(jakarta.servlet)を使う必要あり。Tomcat 9 だと別エラー |
関連情報
- 同じ原因で「型
org.apache.tomcat.InstanceManagerを解決できません」も発生 - Tomcat 10 系では
javax.servlet→jakarta.servletへパッケージ名が変更されている - Spring Boot 3 + 内蔵 Tomcat の場合は外部 Tomcat が不要なので、別の構成エラーを疑う