JavaのnoSuchMethodErrorの原因と解決策
外観上の理由
A.classコールB.methodX。
クラスBの場合にロードされた実行時間がmethodXに存在していてもよいです
methodXアプローチは存在しません。
methodX A.classメソッドのシグネチャとコールB.methodXの署名が一致しません
根本的な原因
矛盾やランタイムバージョンBのコンパイル時のバージョンB
classPathの複数のジャーにランB、JVMエラージャーパッケージにロード
別のクラスローダは、異なるバージョンのBクラスにロードされました。
一度クラスローダの子の親クラスローダの代表団は、B.classへのアクセスは、親classLoderにロード
分類
クラスのJVM
- 理由
- 通常使用のライトコード、コンパイル時およびJDKのバージョンは比較的高いですが、時間が使用される低JDKのバージョンを実行しています
- ソリューション
- 確認動作環境JDKのバージョンが正しいですか
カテゴリジャーに含ま会社のプロジェクト
- 理由
JARパッケージの低いバージョンの導入
スナップショットの導入は、パッケージの最新バージョンではありません
- ソリューション
ジャーパッケージの修正バージョンが正しいバージョンに依存しています
パッケージのスナップショットのバージョンにはありません
- MVN命令を実行する際に-Uパラメータを追加します。インストール/クリーンパッケージをMVN -U
お勧めできません
その他の環境、コンパイル時、あまりにも、パラメータを追加します
- 設定のmaven
settings.xmlで設定
お勧めできません
他の人も改正されなければなりません
- プロジェクト構成でのpom.xml
- 推奨
プロジェクトは、カテゴリに含ま第三者の瓶に依存しています
- 理由
JARパッケージの低いバージョンの導入
より多くのjarパッケージの導入は、しかし、JARパッケージの間違ったバージョンにロードされます
サブクラスのクラスローダは、クラスの時間をロードするクラスローダの親クラスローダクラスローダの低いバージョンに委任します
- ターゲット
-verboseすることから始めます。1.クラスのfind負荷クラスへの
2. JVMクラスローダ構造判断し、クラスローダがロードクラスとは、解決する方法を見つけるためにということです
- ソリューション
ジャーパッケージの正しいバージョンに変更
Mavenのjarコマンドによって、右のパッケージを選択します
- 最初のステップ:リストに依存するJARパッケージ
MVN依存関係:listコマンドリストリスト、および範囲(直接および転送を含む)すべての現在の依存を。
MVN依存関係:ツリーコマンドはすべての階層的な依存性は、依存関係は、書籍の配信から見ることができます。
- ステップ2:使用は望ましくない依存性を除外除外します
- JVMエラーにつながるのjarパッケージをロードするための表示コマンドを使用して
- -verbose:クラス