2017-05-12 6 views
0

NoClassDefFoundError例外の奇妙なケースが発生しています。私のアプリケーションはWebLogic 12cにデプロイされ、数ヶ月間そこで実行されていました。クラスの1つでは、JARの一部であるクラスで定義されたメソッドの静的な呼び出しを行い、そのJARが管理対象サーバーのクラスパスにあることを示します。突然私がその特定のクラスのために "NoClassDefFoundError"を得るようになるまで、すべてがうまくいった。私のJARは変更されておらず、呼び出し側のクラスは変更されておらず、クラスパスも変更されていません。私はJVisualVMを介してCLASSPATHをチェックし、私のJARファイルはそこにあります。Strange NoClassDefFoundError例外

私は、Javaユーティリティやその他のツールを使って、なぜそれが起こっているのかを知る方法はないのでしょうか。

+1

問題を突き止めるのに役立つものがあれば、それは例外の完全なスタックトレースです。 –

+0

あなたが何かに偶然触れていないことが確実なら、それは内部JVMクラスローダーバグのようだと思います。ここに別の人がこの問題を抱えていて、非常にまれでデバッグが難しいようです。https://coderanch.com/t/556782/java/Suddenly-java-lang-NoClassDefFoundError –

+0

100%確かに何も変更されておらず、回。参考にしていただきありがとうございます。 – user7363133

答えて

0

長期間実行していた場合、静的メソッドとクラス定義を含むPermGenメモリがそのクラス定義をガベージコレクションして別のものに置き換える可能性があります。静的メソッドを呼び出すと、そのクラスは再び初期化されますが、初期化の瞬間に何かが失敗した場合(たとえば、例外をスローする静的メソッドの静的フィールドの値を割り当てた場合など)初期化する必要があり、アクセスしようとするとNoClassDefFoundErrorが返されます。

+0

管理対象サーバは、他の開発者が実装を更新している間、少なくとも週に数回はかなり頻繁にバウンスされています。 – user7363133

+0

これが起こる別の方法は、そのクラスの依存関係が初期化に失敗した場合です。依存クラスが存在しないため、失敗したクラスを呼び出さなくても、再びNoClassDefFoundError例外がスローされます – Konstantine

関連する問題