Gradle 設定リポジトリとプロジェクトリポジトリの競合エラー解決方法
問題
Androidプロジェクトの build.gradle
ファイルに JitPack リポジトリを追加しようとすると、以下のエラーが発生します:
Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'build.gradle'
このエラーは、Gradle 6.8で導入された「集中リポジトリ宣言」機能によって発生します。新しいバージョンのGradle(7.0以降)では、リポジトリの設定方法が変更され、従来の build.gradle
ファイルでの設定と競合するようになりました。
注意
Gradle 7.0以降では、リポジトリの宣言方法が変更されています。従来の方法と新しい方法が混在するとこのエラーが発生します。
解決方法
この問題には主に2つの解決方法があります。
方法1: settings.gradle を使用する(推奨)
新しいGradleのベストプラクティスに従い、settings.gradle
ファイルでリポジトリを設定します。
build.gradle
からallprojects
ブロックを削除またはコメントアウトしますsettings.gradle
ファイルを開き、以下のように編集します:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' } // JitPackリポジトリを追加
}
}
rootProject.name = "あなたのプロジェクト名"
include ':app'
- プロジェクトを同期(Sync Now)します
リポジトリモードについて
RepositoriesMode
には3つのモードがあります:
FAIL_ON_PROJECT_REPOS
:プロジェクトレベルのリポジトリを禁止PREFER_PROJECT
:プロジェクトリポジトリを優先PREFER_SETTINGS
:設定リポジトリを優先(デフォルト)
方法2: 従来の方法に戻す
新しい集中リポジトリ機能を使用せず、従来の方法で設定する場合は:
settings.gradle
からdependencyResolutionManagement
ブロックを削除しますbuild.gradle
で従来通り設定します:
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
非推奨の注意
この方法は後方互換性のために残されていますが、新しいプロジェクトでは方法1を採用することをお勧めします。
認証が必要なリポジトリの場合
プライベートリポジトリなど、認証が必要な場合は以下のように設定します:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
name = "CustomMavenRepo"
url = uri("https://your.custom.repo/url")
credentials {
username = "yourUsername"
password = "yourPassword"
}
}
}
}
セキュリティ警告
認証情報を直接コードに書くのは避け、gradle.properties
ファイルを使用することをお勧めします。
まとめ
Gradleの新しい集中リポジトリ管理機能により、リポジトリの設定は settings.gradle
で行うことが推奨されています。既存のプロジェクトを更新する場合や新しいライブラリを追加する際は、build.gradle
ではなく settings.gradle
を編集するようにしましょう。