エラー: 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版バグのポットです。
関連
-
Map<String,Boolean> 型をインスタンス化できません。
-
Java の例外解決。コンストラクタの呼び出しはコンストラクタ内の最初のステートメントでなければならない
-
JAVAMail TLS配信の注意点
-
mvn -v error: main class not found or couldn't be loaded org.codehaus.plexus.classworlds.launcher.
-
互換性のない型です。ArrayList<ArrayList<Integer>>はList<List<Integer>>に変換できない。
-
java にリソースリークがある: 'XXX' は決して閉じられない ソリューション
-
HttpServletRequest型ではgetServletContext()メソッドは未定義です。
-
[Java] jdk1.7 trustAnchors パラメータは空であってはならない
-
未処理の例外:java.text.ParseException
-
中に内部エラーが発生しました。「pro-test 用のディスクリプタをロードしています。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限です。タイプ 'BASE64Decoder' は API ではない (必要なライブラリ xxx の制限)
-
Javaでエラーが発生しました。非静的フィールドへの静的な参照を作成できません。
-
XXX型を囲むインスタンスはアクセスできない問題をJavaで解決
-
環境変数JAVA_HOME(値xxx)が有効なJVMのインストール先を指していません。
-
java にリソースリークがある: 'input' が閉じられない Solution
-
svn: 接続から読み取ることができません。リモートホストが既存の接続を強制的に閉じました。
-
Javaで未処理の例外が発生する理由
-
既に使用されているアドレス:JVM_Bind (ポート競合)
-
JIRA REST API 呼び出し方法
-
トークンに関する構文エラー、代わりに AnnotationName が期待される 構文エラー