タイトル: 型 org.apache.tomcat.InstanceManager を解決できません。必要な .class ファイルから間接的に参照されています
SEOタイトル: Eclipse「型 org.apache.tomcat.InstanceManager を解決できません」原因と対処
| この記事の要点 |
|
エラー内容
Eclipse でソースを開いたときに以下のようなエラーが出ます:
Description: 型 org.apache.tomcat.InstanceManager を解決できません。
必要な .class ファイルから間接的に参照されています
Resource: MyServlet.java
Location: line 1
Type: Java の問題
同種の問題ビューエラー「ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした」も一緒に発生することが多いです。プロジェクト中の Servlet を継承しているクラス全てで同じエラーが出ます。
原因
org.apache.tomcat.InstanceManager は Tomcat のランタイム jarに含まれる API クラスです。javax.servlet.http.HttpServlet を継承するクラスでは Tomcat が間接的にこのクラスを参照するため、ビルドパスに Tomcat の jar が必要になります。
Eclipse の動的 Web プロジェクトでは「ターゲット・ランタイム」として Tomcat を関連付けることで、コンパイル時にこのクラスを参照可能にします。このエラーは以下の状況で発生:
- git clone した他人のプロジェクト(自分の Eclipse に未登録の Tomcat を期待している)
- Tomcat ランタイムが Eclipse に登録されていない
- プロジェクトにターゲット・ランタイムが選択されていない
- 登録済み Tomcat のパスが無効(Tomcat フォルダ移動・削除)
- ワークスペースを別 PC からコピーしたとき
切り分けのフロー
| 確認順 | 確認内容 | NG だった場合 |
|---|---|---|
| 1 | プロジェクトプロパティ → ターゲット・ランタイムで Tomcat にチェックが入っているか | チェックを入れる |
| 2 | ターゲット・ランタイムのリストに Tomcat が表示されているか | ウィンドウ → 設定 → サーバー → ランタイム環境で追加 |
| 3 | 登録された Tomcat のインストールパスが実在するか | 編集して正しいパスに修正 |
| 4 | Java のビルド・パス → ライブラリーに Apache Tomcat の jar 群が見えるか | 1〜3 をやり直し |
| 5 | プロジェクト → クリーン → 全プロジェクトを再ビルド | Maven プロジェクトなら更新も実行 |
対処手順
ステップ 1: Tomcat をランタイムとして登録
ウィンドウ (Window) → 設定 (Preferences)
→ サーバー (Server) → ランタイム環境 (Runtime Environments)
→ 追加 (Add...)
→ Apache → Apache Tomcat v9.0 を選択 → 次へ
→ Tomcat installation directory にパスを設定
Windows: C:\apache-tomcat-9.0.85
Mac: /usr/local/Cellar/tomcat@9/9.0.85/libexec
Linux: /opt/tomcat
→ JRE を選択 → 完了
ステップ 2: プロジェクトに関連付け
プロジェクト右クリック → プロパティ
→ ターゲット・ランタイム
→ Apache Tomcat v9.0 にチェック
→ 適用して閉じる
ステップ 3: 再ビルド
1. プロジェクト → クリーン (Project → Clean...)
2. 対象プロジェクトを選択 → 「クリーン」
3. Maven プロジェクトの場合は追加で:
プロジェクト右クリック → Maven → プロジェクトの更新 → 「OK」
4. 問題ビューが消えるのを確認
git clone 後にチームメンバー間で発生しないようにする
Eclipse の .settings/ や .classpath はリポジトリに含めても個人パスが入っているため、結局メンバー側で再設定が必要です。プロジェクトの README に「ターゲット・ランタイムに Tomcat 9.0 を設定すること」と明記しておくのが現実的です。
関連エラー
- ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした — 同じ原因。同時に直る
- The type javax.servlet.http.HttpServlet cannot be resolved — Servlet API jar 不足。Tomcat ランタイムで解決
- HTTP Status 404 - /myapp/ — ランタイム関連付けは出来ても WAR デプロイがされていない可能性