1. ホーム
  2. Java

エラー: jdkのバージョンの問題により、クエリへの参照が曖昧になる

2022-02-10 05:08:39
1はオープンソースプロジェクトDavinciを使用し、その上に適応しています。
状況はこんな感じで、現在のプロジェクトはjenkinsのテスト環境では正常にビルドされているのですが、プレリリースの準備が整うとjenkinsが以下のエラーを報告します。
[ERROR] プロジェクト davinci-server_ 3.01 でゴール org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) の実行に失敗しました: コンパイルに失敗しました。コンパイルに失敗しました。
[ERROR] /home/data_jenkins/workspace/bi-davinci/server/src/main/java/edp/core/utils/SqlUtils.java:[251,14] error: query is ambiguous reference to query
[ERROR] JdbcTemplate のメソッド <T>query(String,ResultSetExtractor<T>) と JdbcTemplate のメソッド query(String,RowCallbackHandler) の両方が一致しました。
[ERROR] ここで T は型変数です。
[ERROR] T extends Object がメソッド <T>query(String,ResultSetExtractor<T>) の中で宣言されている。
[ERROR] /home/data_jenkins/workspace/bi-davinci/server/src/main/java/edp/davinci/service/excel/SheetWorker.java:[76,20] error: query is ambiguous reference to the query
[ERROR] JdbcTemplate のメソッド <T>query(String,ResultSetExtractor<T>) と JdbcTemplate のメソッド query(String,RowCallbackHandler) の両方が一致しました。
[ERROR] ここで T は型変数です。
[ERROR] T extends Object がメソッド <T>query(String,ResultSetExtractor<T>) の中で宣言されている。
[ERROR] /home/data_jenkins/workspace/bi-davinci/server/src/main/java/edp/davinci/service/excel/SheetWorker.java:[76,26] error: incompatible types: cannot infer type-variable(s) T
[ERROR] (実引数と形式引数のリストの長さが異なる)
[ERROR] ここで、T は型変数です。
[ERROR] T extends Object がメソッド <T>getObject(int,Class<T>) の中で宣言されている。
[ERROR] /home/data_jenkins/workspace/bi-davinci/server/src/main/java/edp/davinci/service/excel/SheetWorker.java:[145,16] error: query is ambiguous reference to query
[ERROR] JdbcTemplate のメソッド <T>query(String,ResultSetExtractor<T>) と JdbcTemplate のメソッド query(String,RowCallbackHandler) の両方が一致する。
[ERROR] ここで T は型変数です。
[ERROR] T extends Object がメソッド <T>query(String,ResultSetExtractor<T>) の中で宣言されている。
[ERROR] -> [ヘルプ1].
LifecycleExecutionException: ゴール org.apache.maven.plugins:maven-compiler-plugin:3.6.1 の実行に失敗しました。プロジェクト davinci-server_3.01 でコンパイル (default-compile): コンパイルに失敗しました。
2 トラブルシューティングの流れ
1 まずjenkinsサーバーに上がり、以下のコマンドでバージョンを確認します。
# mvn -version // バージョンが表示されます: jdk 1.8.0_11、maven 3.6.1
何も問題はなさそうだし、jdk は 1.8 だし、除外してしまおう
2 その後、プロジェクトのpom.xmlを見て、maven-compiler-pluginのバージョンの問題かもしれないと思い、以下のように見てみました。
で、バージョン 3.6.1 を 3.2, 3.5.3, 3.8.0 にそれぞれ変更した後、ビルドはまだ元のエラーを報告しています。 したがって、この可能性を排除することができます .
そして、問題はmavenのローカルリポジトリのダウンロードが破損していることだと推測し、mvn -versionで該当するmavenディレクトリを探し、リポジトリの場所を以下のように確認しました。
# cd ~
# cd  .m2/repository
# rm -rf . /* // すべて消去
その後、jenkinsをリビルドし はまだ元のエラーを報告しているので、それを除外することができます。
それから、jdkのバージョンの問題かな?と思いきや、jdk1.8で問題ないようです。しかし、まだjdkのバージョンの問題を確認するために行く、最初にテスト環境のjenkinsに行くjdk .8.0_211に対応するjdkバージョンを見つけるために、少し異なっているようだ、次にテスト環境のjdkはプレリリースjenkinsにコピーして、java_homeを変更する jdk 0.8.0_211 パス、そして最後に再ビルドが見つかりました。 元のエラーはまだ報告されており、この可能性は除外していました。しかし、同僚に相談した結果、mvnコマンドに-Xを追加してデバッグ情報を出力したところ、肝心の問題メッセージは以下のようになりました。
上記で jdk のバージョンが 1.8.0 のままであることが判明しましたが、落とし穴です。 https://jingyan.baidu.com/article/aa6a2c140a6c564c4d19c468.html ). jdkを使用する場合  1.8.0_211以降で実際にビルドが動きます!
要約: jdk版バグのポットです。