🔐️

JCenter の証明書が切れたので Spring Boot Gradle Plugin が取れなくなった対応

2022/11/26に公開

JCenter が終了するらしい

Java のプロジェクトから離れてたので知らなかった

https://blog1.mammb.com/entry/2021/04/13/225733

  1. JCenter が終了するって言っても Maven Central もあるし互換は基本あるから大丈夫だよ
  2. JCenter は Maven Central のミラーだから、JCenter にしかないライブラリは困っちゃうよ
  3. 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 つ

  1. jcenter() を外して mavenCentral() にしろ
  2. jcenter() で HTTP にしろ

1 はこんな感じのはず

これを

build.gradle
repositories {
    jcenter()
}

こうする

build.gradle
repositories {
    mavenCentral()
}

2 はこんな感じのはず

これを

build.gradle
repositories {
    jcenter()
}

こうする

build.gradle
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 とか探しても全然ヒットしないでやんの

って中で見つかったのがこれ

https://twitter.com/recrsn/status/1596347714023063554

そっかそっか、プラグインは buildscript で設定しないとだめだったっけか
repositories.jcenter では dependencies にしか影響しないんだったっけか

と思いつつ、これを plugins の前に追記 ( plugins より下には書けない、エラーになる )

build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
}

plugins {
    id 'org.springframework.boot' version '2.7.4'
}

直った!!

そゆことだったね

https://tech.excite.co.jp/entry/2022/08/15/153626

結論

  • ライブラリ ( dependencies に列挙して、src/**/*.java から使うもの ) は repositoriesjcenter()mavenCentral() にすれば大丈夫
  • プラグイン ( plugins に列挙して、build.gradle で使うもの ) は buildscript.repositoriesmavenCentral() にすれば大丈夫
  • JCenter にしかないライブラリは、多分代替ライブラリを探すか Maven Central に上がるのを待つしかない ( 本記事の範囲外 )

ひとこと

数日前にセキュリティソフトを入れたばっかりでそいつがまだ若干不安定なので、それのせいかと思って 1 時間くらい対応を間違えた

それのせいだと思って 1 年前に使ってた PC 持ってきたら時計が狂ってて、SSL の検証が正しくできなくて違うビルドエラーを見て ( 無駄に ) ハマった

時計が過去に狂ってたからなのかな、その古い PC では JCenter へのブラウザアクセスが成功してしまったので、ずっと ( 無駄に ) セキュリティソフトを怪しんでた

あと build.gradle がすごい細かく細分化されてたり、社内のプライベートリポジトリへの通信があったり、Git Submodule を使ってたりで、問題の切り分けが大変だった

変なことが重なってむきーな感じだったけど、ビルドできるようになってよかった...

よくわからない唐突に発生するエラーを調べても全然答えが出ないと気持ちがたいへん辛いので、せめて薄っぺらい内容でも日本語の記事をと思って雑記

Discussion