java.lang.NoClassDefFoundErrorを解説
javaに関わる処理を実行すると
java.lang.NoClassDefFoundError
というエラーがでることがあります。
初心者の方向けに
- エラーの意味
- 様々な原因・対処法
を説明します。
Javaのクラス定義が存在しないエラー
まずは
java.lang.NoClassDefFoundError
何を意味するのか?
を考えるのが王道であり近道です。
一見、意味不明な記号に見えますが、
結局は、英単語の塊です。
1つ1つ分解して訳すと
- Java.lang →java言語
- No →無い
- class →クラス
- def →定義※
- found →発見
- Error →エラー
※define(定義)を省略している表現
これらをつなぎ合わせると
Javaのクラス定義が存在しないエラー
という事になります。
原因・対処法
エラーの意味はシンプルなのですが
様々なシーンで出てくるエラーだと思っています。
原因と対応は様々です。
私がハマった例をお伝えします。
自作のクラス定義を呼び出す場合
自作のクラス定義を呼び出すときに、このエラーが出ている場合は
呼び出すクラス名を間違えている
ことが考えられます。
意外とハマるのが
呼び出し側と呼び出される側で
- スペル間違い
- 大文字と小文字が一致していない
ことが考えられます。
それ以外でエラーが出た場合
自作のクラス定義を呼び出しているわけではない場合。
例えばjavaで開発されているツールやライブラリなどを呼び出す場合にこのエラーが出た場合は
以下の原因が考えられます。
- javaのパスが通っていない
- javaのバージョンアップで対象のクラスが廃止になった。
javaのパスが通っていない
ツールやライブラリを呼び出して1発目でこのエラーが出た場合は
単純にjavaのパスが通っていないためにクラスが存在しない可能性が高いです。
JDKへのパスが通っているか確認してみてください。
javaのバージョンアップで対象のクラスが廃止になった。
昔はエラーが出ていなく
突如エラーが出たのであれば
javaのバージョンアップで対象のクラスが廃止になった可能性があります。
例えばAというjavaのJDKに入っているクラスを呼び出そうとしてJavaがバージョンアップされてて、Aというクラスが無くなってしまった。
ということがありえます。
あるいはBというクラス名に名前が変わったということも考えられます。
その場合は、使用しているアプリを最新版にしてみてください。
最新版にしても動かないのであれば、サポートが終了しているなどの事情で最新版にできないのなら、場合によってはJavaのダウングレードが必要になります。
中級者への道
まずこのようなエラーが出た場合は
公式リファレンスを読むことをお勧めします。
言い回しは難しいですが、
- 洗練された短い文章
- 圧倒的な正確性
が特徴です。
家電製品でエラーが出たら取扱説明書を読むのと同じように
JAVAのエラーが出たら公式リファレンスをみる
が王道です。
原文が英語なので、少し読みづらいですが、これらが読み解けるようになると
完全に初心者から卒業できることになります。
少しずつでも読むことをオススメします。