JCenter は2022年2月で終了するので Gradle プロジェクトは早めの対応を!

JCenter の終了

JFrog の以下の発表によると、JCenter は 2022年2月1日 で利用できなくなるとのことです。

jfrog.com

当初は 2021年5月1日 で終了でしたが、2022年2月1日 まで延期されました。


Gradle プロジェクトでは、Init プラグインによりデフォルトで JCenter が選択されることもあり、大きな影響がありそうです。実際 GitHub 上では 100万を超えるリポジトリで JCenter が利用されているとのことです。

終了までのタイムラインは以下のようになります。

Date Impact
2021年3月31日 JCenter はパッケージの新しい更新を受け付けなくなる
2021年5月1日 Bintrayのサービスが利用できなくなる
2022年2月1日 JCenter でのアーティファクトの解決ができなくなる


どうすれば良いか

以下のように指定してあるリポジトリは変更が必要です。

repositories {
    jcenter()
}

mavenCentral() を利用するように変更します。

repositories {
    mavenCentral()
}

なお、以下のようにURLを直接指定している場合も変更が必要となります。

repositories {
    maven {
       url = "https://jcenter.bintray.com"
       url = "https://dl.bintray.com/<some user name>"
    }
}

明示的にビルドスクリプトに jcenter() を利用していない場合でも、プラグインで利用しているようなケースもあります。

f:id:Naotsugu:20210413221517p:plain

Gradle 7 では、既に jcenter() は deplicated 指定されており、次のリリースでは API から削除されることが予定されています。


JCenter は MavenCentral のミラーとしても機能するため、Maven Central で利用可能な依存関係は JCenter でも利用できますが、その逆はありません。 com.jfrog.bintray プラグインで Bintray に公開しているライブラリなどは利用できなくなります。

つまり、JCenter でしか公開されていないパッケージがある場合は、何ら化の大体手段を見つける必要があります。


現在、主要なライブラリは JCenter からの移行を進めていますが、古いライブラリは使えなくなったり、移行されたとしても古いバージョンは入手できなくなる可能性もあります。

普通の Java ライブラリはたいていの場合 mavenCentral() で事足りますが、Android 系のライブラリは影響が大きいようです。


JCenter への依存の確認方法

JCenter を削除した(mavenCentral() へ切り替えた)状態で、以下によりキャッシュにある全ての依存関係をリフレッシュします。

$ ./gradlew --refresh-dependencies

このオプションにより対象のリポジトリ全てに対して、新規に解決処理が実行されるようになります。

その上で、--stacktrace --info オプション付きでビルドを行い、解決できなかったライブラリをローカルのリポジトリに確保しておきましょう。