1. ホーム
  2. ジャワ

NoClassDefFoundErrorの処理(xmlreadersクラスを初期化できないピットに遭遇した)

2022-02-28 06:57:44
<パス

この記事は、プロジェクトをtomcatに公開する際に発生する問題のみを対象としています(その他の問題は動作しない場合があります)。

NoClassDefFoundErrorとClassNotFoundExceptionの違いについて

java.lang.ClassNotFoundExceptionとjava.lang.NoClassDefFoundErrorは、どちらもJavaのクラスパスに関連するエラーですが、全く別のものです。NoClassDefFoundErrorは、JVMが動的実行時に、指定したクラス名に基づいてクラスパスから該当するクラスを探してロードしますが、クラスを見つけられないときに、java.ClassDefFoundExceptionが表示されます。 lang.NoClassDefFoundErrorのエラーが発生しますが、ClassNotFoundExceptionの場合はコンパイル時にエラーが発生し、その原因がすべて環境の問題であることがわかっているので、NoClassDefFoundErrorより解決しやすいのです。また、J2EE環境で作業をしていてNoClassDefFoundError例外が発生し、そのエラーに該当するクラスが存在する場合、そのクラスはおそらくクラスローダーから見えていないことを意味します。

この例外が発生した理由についての憶測。

以下は、mavenプロジェクトの例です(私のはmavenプロジェクトなので)。

org.jdom.Document doc = (new SAXBuilder()).build(in); 

An error is reported when java.lang.NoClassDefFoundError could not initialize class xmlreaders

xmlreaders クラスの初期化エラー
1. まず、jdom.jarがmaven依存で導入されているかどうか(バージョンに関しては置いておきます)、導入されている場合はjarがないことによるエラーを除外する(この手順を間違えるとコンパイルが通りません)。
2、mavenプロジェクトをtomcatに公開し、WEB-INF/lib以下のjarにjdomが含まれているか確認します。
そうでない場合は、このjarが正常にデプロイされていないことがエラーの原因です。インターネットでは、デプロイメントアセンブリでこのパッケージを追加することについて多くのことが言われていますが、そうすることはお勧めしません、これは一時的にこのパッケージを追加することができるだけです、それはデプロイに失敗した理由を見つけることをお勧めします。
3. WEB-INF/lib 以下に jdom.jar パッケージがある場合、jar を解凍して開き、xmlreaders.class があるかどうか確認します。
4, 上記の3つの問題がない場合、不足している依存関係パッケージがあるかどうかを確認しに行きます。
5、私の解決策:上記のどれも私の問題ではありません、私のjdomはバージョン2.0.2であり、バージョン1.0に置き換えて動作します、多分パッケージ自体の高いバージョンに問題があるのでしょう。