English Post: ClassNotFoundException cause and solution.
ClassNotFoundExceptionの原因はNoClassDefFoundErrorなどに比べるとわかりやすい。
ClassForNameしているところが原因なので、たいていは引数のクラス名のスペルミス。
このエラーが発生するときは、間接的にしているClassForNameを使っているケースがほとんどだろう。
一例として、web.xmlのServletやFilterの定義でクラス名が間違っているとこれまたTomcat起動時にClassNotFoundExceptionで落ちる。
その場合は以下のようなメッセージがでてTomcatのコンテキスト起動に失敗する。この場合該当Servletは利用不可能となるので、「the requested resource is not available.」の404エラーの真の原因となることも多い。
致命的: フィルタ xxxFilter の起動中の例外です
java.lang.ClassNotFoundException: com.rutake.xxxFilter
Javaソースコードでやりがちなのはパッケージ名を略して、ClassNotFoundExceptionを発生させるケース。
// パッケージ名まで含めて書かないとダメなので以下はClassNotFoundExceptionが出る Class.forName("String").newInstance(); // これならClassNotFoundExceptionは出ない Class.forName("java.lang.String").newInstance();
パッケージ名まで含めてクラスのスペルが正しいのならNoClassDefFoundErrorと同じ対処法でjarライブラリの中身をチェック!
チェックポイントは以下の2点
・クラスパスに該当クラスのjarが含まれているか
・そのjarファイルの中に正しくクラスが格納されているか
大概JDBCドライバーの置き忘れだったり、クラス名が変更になっていたり環境設定のミスに起因するエラーなのでわかんなかったら技術面取りまとめの人に聞いてみるべし。