2.

Eclipse「型 org.apache.tomcat.InstanceManager を解決できません」原因と対処

編集
この記事の要点
  • 「型 org.apache.tomcat.InstanceManager を解決できません」は動的 Web プロジェクトに Tomcat ランタイムが関連付けられていないのが原因
  • 対処: プロジェクト右クリック → プロパティ → ターゲット・ランタイムで Tomcat にチェック
  • Eclipse に Tomcat ランタイムが未登録ならウィンドウ → 設定 → サーバー → ランタイム環境で追加
  • git clone 直後の他人プロジェクトでよく発生(個人ごとの Eclipse 設定はリポジトリに入らない)
  • 同じ原因で「ビルド・パスが不完全」エラーもセットで発生する

エラー内容

Eclipse でソースを開いたときに以下のようなエラーが出ます:

Description: 型 org.apache.tomcat.InstanceManager を解決できません。
必要な .class ファイルから間接的に参照されています

Resource: MyServlet.java
Location: line 1
Type: Java の問題

同種の問題ビューエラー「ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした」も一緒に発生することが多いです。プロジェクト中の Servlet を継承しているクラス全てで同じエラーが出ます。

原因

org.apache.tomcat.InstanceManagerTomcat のランタイム 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 のインストールパスが実在するか編集して正しいパスに修正
4Java のビルド・パス → ライブラリーに 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 デプロイがされていない可能性

確認すべき構成ファイル

エラーが直らない場合は以下のファイルも確認します:

ファイル確認内容
.projectorg.eclipse.jst.j2ee.web.WebNature 等が含まれているか
.classpathorg.eclipse.jst.server.core.container/org.eclipse.jst.server.tomcat.runtimeTarget/Apache Tomcat v9.0 のエントリ
.settings/org.eclipse.wst.common.project.facet.core.xmljst.web ファセットのバージョンと Tomcat バージョンの整合性
web.xmlServlet 4.0 (web-app_4_0.xsd) なら Tomcat 9、Servlet 5.0/6.0 なら Tomcat 10/11 が必要

Tomcat 9 と Tomcat 10 のパッケージ名の違い

Tomcat 10 以降では Jakarta EE 移行に伴い javax.servlet パッケージが jakarta.servlet にリネームされました:

// Tomcat 9 系
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// Tomcat 10 系以降
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

プロジェクトのインポート/import 文と、登録した Tomcat のバージョンが一致していないと、関連エラー「The type javax.servlet.http.HttpServlet cannot be resolved」が出ます。

サーバービューでの確認

Eclipse 下部の サーバービュー (Servers) でも切り分けが可能です:

  • サーバービューに Tomcat が無ければ 右クリック → 新規 → サーバーで追加
  • 追加した Tomcat に右クリック → 追加と除去 (Add and Remove)でプロジェクトをサーバーに登録
  • Tomcat をダブルクリック → 「Use Tomcat installation」を選択(インストール先 jar を使用)

Eclipse のキャッシュが原因の場合

全ての設定が正しいのにエラーが取れない場合、Eclipse のメタデータ破損が原因のことがあります:

  1. Eclipse を終了
  2. ワークスペース直下の .metadata/.plugins/org.eclipse.jdt.core/*.index を削除
  3. Eclipse を -clean オプション付きで起動: eclipse.exe -clean
  4. 起動後、プロジェクト → クリーン → 全プロジェクトのビルド
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません。ビルド・パスを修正してから、プロジェクトの取り消しおよび再ビルドを行ってください。
  2. 型 org.apache.tomcat.InstanceManager を解決できません。必要な .class ファイルから間接的に参照されています
  3. 要求されたリソースへのアクセスが拒否されました