配置gradle默认使用阿里云Maven

1,585 阅读1分钟

网上看到不少在init.gradle中的allprojects配置全局maven的代码。

但是在新版AndroidStudio的gradle.kts模板中(或高版本gradle),想要不修改直接使用是不行的,会抛出如下错误。

Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'init.gradle'

原因出在项目的settings.gradle中默认设置了:

repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)

改成以下代码就行了:

repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)

但是这样每个新项目都要修改就很麻烦。

此处提供init.gradle.kts,能够做到无感配置全局maven,放置在<用户目录>/.gradle/下即可生效。

@file:Suppress("UnstableApiUsage")

val pluginMirrors = mapOf(
    "Aliyun Plugin Repository" to "https://maven.aliyun.com/repository/gradle-plugin/"
)
val dependencyMirrors = mapOf(
    "Aliyun Central" to "https://maven.aliyun.com/repository/central/",
    "Aliyun Public" to "https://maven.aliyun.com/repository/public/",
    "Aliyun Google" to "https://maven.aliyun.com/repository/google/",
    "Aliyun Apache Snapshots" to "https://maven.aliyun.com/repository/apache-snapshots/",
    "163 Public" to "https://mirrors.163.com/maven/repository/maven-public/",
    "Huawei Public" to "https://repo.huaweicloud.com/repository/maven/",
    "Tencent Public" to "https://mirrors.cloud.tencent.com/nexus/repository/maven-public/"
)

fun RepositoryHandler.enableMirrors(mirrors: Map<String, String>) {
    val defaultRepos = associate { it.name to it }
    clear()
    mirrors.filterNot { it.key in defaultRepos }.forEach {
        maven {
            name = it.key
            url = uri(it.value)
        }
    }
    addAll(defaultRepos.values)
}

settingsEvaluated {
    pluginManagement.repositories.enableMirrors(pluginMirrors)
    dependencyResolutionManagement.repositories.enableMirrors(dependencyMirrors)
}