💪

VersionCatalogでの除外設定(exclude)

2023/03/08に公開

起こったこと

Glideのcompose対応ライブラリ(com.github.bumptech.glide:compose:1.0.0-alpha.1)を導入しようとして定義を追加したところreleaseビルドでUIテスト実行時に以下のエラーになりました。

Execution failed for task ':app:processReleaseAndroidTestManifest'.
Could not resolve all files for configuration ':app:releaseAndroidTestRuntimeClasspath'.
   > Could not resolve androidx.test:core-ktx:1.5.0.
     Required by:
         project :app
      > Cannot find a version of 'androidx.test:core-ktx' that satisfies the version constraints:
           Dependency path 'sample:app:unspecified' --> 'androidx.test:core-ktx:1.5.0'
           Constraint path 'sample:app:unspecified' --> 'androidx.test:core-ktx:{strictly 1.4.0}' because of the following reason: releaseRuntimeClasspath uses version 1.4.0

   > Could not resolve androidx.test:core-ktx:{strictly 1.4.0}.
     Required by:
         project :app
      > Cannot find a version of 'androidx.test:core-ktx' that satisfies the version constraints:
           Dependency path 'sample:app:unspecified' --> 'androidx.test:core-ktx:1.5.0'
           Constraint path 'sample:app:unspecified' --> 'androidx.test:core-ktx:{strictly 1.4.0}' because of the following reason: releaseRuntimeClasspath uses version 1.4.0

何が起こった?

調べると、以下のような記事があった。
https://blog.s64.jp/entry/android-multimodule-version-constraints-conflict/

詳しくは記事書いてある通りかと思いますが、よくあるライブラリバージョンの解決が出来てない感じなので、まず依存関係を詳しく調べてみました。
GlideComposeを追加したため発生してるので、明らかにそこが怪しいのですが、Glide側はやはりandroidx.test:core-ktxは1.4.0を指定してるので、そのためバージョンの解決が出来なくなってしまったようです。

どうやって直すか

こういった事は割とあるので調べると他でもIssuesが上がっていました。
https://github.com/mozilla-mobile/fenix/issues/5217

あるあるだと思うのですが、特定のライブラリを除外設定することで解決することはよくあるので今回も試そうと思ったのですが、如何せんVersionCatalogを利用してるbuild.gradleで除外設定したことない。。。

と、少しフリーズしたのちググったらあっさり答えが分かりました。
https://stackoverflow.com/questions/71680935/how-to-exclude-dependencies-from-gradle-version-catalog

implementation dependencies.create(libs.glide.compose.get()) {
    exclude group: 'androidx.test', module: 'core-ktx'
}

なるほど。これで該当ライブラリをexcludeしたら正常にビルドも通りUIテストも動作しました。
また1つ勉強になりました。

Discussion