2

単純なgetterメソッドのクラスの1つでNoSuchMethodErrorを取得しています。奇妙なことに、コードをデバッグして、デバッガーでエラーが発生することを確認できます(関連する行をステップオーバーすることにより)が、IDE(IntelliJ IDEA)を使用してメソッドが存在することを確認することもできます。

xxxx.getYYY()実行すると、IDE式エバリュエーターを介して正常に評価されます。そして、リストにメソッドxxxx.getClass().getMethods()が表示されます。getYYY()ビルドされたすべてのファイル、IDE出力ディレクトリ、IDEキャッシュ、再起動などをクリーンアップしようとしましたが、何も役に立たないようです。

何かに対してコンパイルした場合にNoSuchMethodErrorが発生することは理解できますが、実行時に別のJar/クラスが見つかりました。しかし、それは私に理由を説明していません。実行時に問題の行にデバッグしているときに、メソッドがそこにあることがわかりますが、行をステップオーバーすると例外がスローされます。

別のマシンで再生しようとしましたが、再生されません。

ここで何が起こっているのかについて誰かが洞察を持っていますか?

4

2 に答える 2

2

ほとんどの場合、編集しているものと同じバージョンのコードをIntelliJで実行していません。この問題は、編集しているものとの依存関係にあるさまざまなバージョンで一度に開いている多くのMavenプロジェクトでよく発生します。IntelliJは混乱する可能性があります(または実際に実行しているバージョンについて混乱します)

于 2011-06-22T08:37:24.157 に答える
0

NoSuchMethodError-これは主に実行時に発生します。このエラーに遭遇しました。その理由は、クラスパス内のasmライブラリとcglibライブラリのバージョンに互換性がないためです。

asmおよびcglibライブラリは、実行時のバイトコード操作のために、hibernate、spring、hadoopなどの多くのフレームワークで使用されます。

クラスローダーは常にクラスパス上のjarの最初のバージョンを参照します。

于 2015-09-03T21:35:06.143 に答える