ここでも同じ問題ですが、Eclipse プラグインを構築しています。
JavaのNoClassDefFoundErrorの理由は何ですか?
Java のNoClassDefFoundErrorは、Java 仮想マシンが、コンパイル時に使用可能だった特定のクラスを実行時に見つけられない場合に発生します。たとえば、クラスからのメソッド呼び出しまたはクラスの静的メンバーへのアクセスがあり、そのクラスが実行時に使用できない場合、JVM は NoClassDefFoundError をスローします。これは、実行時にのみクラスをロードしようとしたときに発生し、コンパイル時ではなく実行時に名前が提供された ClassNotFoundException とは異なることを理解することが重要です。多くの Java 開発者は、この 2 つのエラーを混同して混乱します。
つまり、コンパイル時にクラスが存在したが、実行時にJavaクラスパスで使用できない場合、NoClassDefFoundErrorが発生します。
Java での java.lang.NoClassDefFoundError と ClassNotFoundException の違い
何度もjava.lang.ClassNotFoundExceptionとjava.lang.NoClassDefFoundErrorを混同しましたが、どちらも Java クラスパスに関連しており、互いに完全に異なっています。ClassNotFoundExceptionは、JVM が実行時にクラスを動的にロードしようとするときに発生します。つまり、実行時にクラスの名前を指定すると、JVM はそれをロードしようとし、そのクラスがクラスパスに見つからない場合はjava.lang.ClassNotFoundExceptionをスローします。. NoClassDefFoundError の場合、コンパイル時に問題のあるクラスが存在していたため、プログラムは正常にコンパイルされましたが、何らかの理由で実行時に使用できませんでした。私の意見では、NoClassDefFoundError は ClassNotFoundException よりも解決が簡単です。これは、ビルド時に Class が存在していたことがわかっているためですが、環境に完全に依存します。対応する ClassLoader に表示されます。
詳細: http://javarevisited.blogspot.com.es/2011/06/noclassdeffounderror-exception-in.html
Eclipse プラグインのソリューション
NoClassDefFoundErrorを取得すると、クラスパスが少なくとも 1 か所で定義されていません。Eclipse プラグインでは、これらは外部ライブラリのクラスパスを定義する必要があるすべての場所です。
- プロジェクトのプロパティ: プロジェクトを右クリックし、プロパティを選択します。次に、Java ビルド パス、次にライブラリです。最後に、ライブラリの jar を追加します (外部またはプロジェクトのフォルダー内)。
- plugin.xml ファイル内: plugin.xml ファイルを開き、Runtime タブをクリックします。ライブラリを Classpath セクションに追加します。[ビルド] タブをクリックし、追加のクラスパス エントリにライブラリを追加します。
それだけです。
この種のエラーは不適切なクラスパス定義から発生するため、Android プロジェクトの場合も同様の解決策になるはずです。