JCenter の終了
JFrog の以下の発表によると、JCenter は 2022年2月1日 で利用できなくなるとのことです。
当初は 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()
を利用していない場合でも、プラグインで利用しているようなケースもあります。
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
オプション付きでビルドを行い、解決できなかったライブラリをローカルのリポジトリに確保しておきましょう。