JCenter の証明書が切れたので Spring Boot Gradle Plugin が取れなくなった対応
JCenter が終了するらしい
Java のプロジェクトから離れてたので知らなかった
- JCenter が終了するって言っても Maven Central もあるし互換は基本あるから大丈夫だよ
- JCenter は Maven Central のミラーだから、JCenter にしかないライブラリは困っちゃうよ
- Maven Central の方を明示して取りに行けばある程度大丈夫だよ
ってことが書いてあります
3 の部分について、ハマったのでメモ ( 2 は手元では発生を確認できなかった )
久しぶりにビルドしたら通らなくなってた
こんなんが出る
$ ./gradlew clean test
FAILURE: Build failed with an exception.
~~ 略 ~~
> Could not resolve org.springframework:spring-core:5.3.23.
Required by:
project : > org.springframework.boot:org.springframework.boot.gradle.plugin:2.7.4 > org.springframework.boot:spring-boot-gradle-plugin:2.7.4
> Could not resolve org.springframework:spring-core:5.3.23.
> Could not get resource 'https://plugins.gradle.org/m2/org/springframework/spring-core/5.3.23/spring-core-5.3.23.pom'.
> Could not GET 'https://jcenter.bintray.com/org/springframework/spring-core/5.3.23/spring-core-5.3.23.pom'.
> PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
困る
確かに https://jcenter.bintray.com/org/springframework/spring-core/5.3.23/spring-core-5.3.23.pom にアクセスしてみると証明書がだめになってる
Stack Trace 見ろとかターミナルに言われてるので見てみる
$ ./gradlew clean test --stacktrace --info
# 超抜粋
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve org.springframework:spring-core:5.3.23.
Caused by: org.gradle.api.resources.ResourceException: Could not get resource 'https://plugins.gradle.org/m2/org/springframework/spring-core/5.3.23/spring-core-5.3.23.pom'.
Caused by: org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'https://jcenter.bintray.com/org/springframework/spring-core/5.3.23/spring-core-5.3.23.pom'.
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed
Caused by: java.security.cert.CertPathValidatorException: validity check failed
Caused by: java.security.cert.CertificateExpiredException: NotAfter: Sat Nov 26 08:59:59 JST 2022
んあ?
今朝??
これ今朝の話???
( 作業および執筆は Sat Nov 26 11:30:00 JST 2022
ごろ)
対応 ( 不十分 )
とりあえず適当にざっと調べると出てくるのはこの 2 つ
-
jcenter()
を外してmavenCentral()
にしろ -
jcenter()
で HTTP にしろ
1 はこんな感じのはず
これを
repositories {
jcenter()
}
こうする
repositories {
mavenCentral()
}
2 はこんな感じのはず
これを
repositories {
jcenter()
}
こうする
repositories {
jcenter {
allowInsecureProtocol true
url "http://jcenter.bintray.com"
}
}
しかしどっちをやってもエラーが変わらない
もう一度ちゃんとエラーを見る
project : > org.springframework.boot:org.springframework.boot.gradle.plugin:2.7.4 > org.springframework.boot:spring-boot-gradle-plugin:2.7.4
プラグインって書いてある
プラグインを JCenter に取りに行ってしまっているっぽい
対処 ( 十分 )
Twitter で jcenter
とか spring
とか探しても全然ヒットしないでやんの
って中で見つかったのがこれ
そっかそっか、プラグインは buildscript
で設定しないとだめだったっけか
repositories.jcenter
では dependencies
にしか影響しないんだったっけか
と思いつつ、これを plugins
の前に追記 ( plugins
より下には書けない、エラーになる )
buildscript {
repositories {
mavenCentral()
}
}
plugins {
id 'org.springframework.boot' version '2.7.4'
}
直った!!
そゆことだったね
結論
- ライブラリ (
dependencies
に列挙して、src/**/*.java
から使うもの ) はrepositories
のjcenter()
をmavenCentral()
にすれば大丈夫 - プラグイン (
plugins
に列挙して、build.gradle
で使うもの ) はbuildscript.repositories
をmavenCentral()
にすれば大丈夫 - JCenter にしかないライブラリは、多分代替ライブラリを探すか Maven Central に上がるのを待つしかない ( 本記事の範囲外 )
ひとこと
数日前にセキュリティソフトを入れたばっかりでそいつがまだ若干不安定なので、それのせいかと思って 1 時間くらい対応を間違えた
それのせいだと思って 1 年前に使ってた PC 持ってきたら時計が狂ってて、SSL の検証が正しくできなくて違うビルドエラーを見て ( 無駄に ) ハマった
時計が過去に狂ってたからなのかな、その古い PC では JCenter へのブラウザアクセスが成功してしまったので、ずっと ( 無駄に ) セキュリティソフトを怪しんでた
あと build.gradle
がすごい細かく細分化されてたり、社内のプライベートリポジトリへの通信があったり、Git Submodule を使ってたりで、問題の切り分けが大変だった
変なことが重なってむきーな感じだったけど、ビルドできるようになってよかった...
よくわからない唐突に発生するエラーを調べても全然答えが出ないと気持ちがたいへん辛いので、せめて薄っぺらい内容でも日本語の記事をと思って雑記
Discussion