网上看到不少在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)
}