Gradle Wrapper 下载地址镜像
该地址无法在 init.gradle.kts
文件中设置,只能直接在项目中的 gradle-wrapper.properties
文件中直接修改:
properties
# 原地址:
# distributionUrl=https://services.gradle.org/distributions/gradle-8.11.1-bin.zip
# 镜像地址:
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.11.1-all.zip
即将 https://services.gradle.org/distributions/
地址替换为 https://mirrors.cloud.tencent.com/gradle/
。
需要注意的是,最好将 *-bin.zip
文件改成 *-all.zip
文件,因为有时候可能出现从原地址自动下载 *-source.zip
等其他文件的情况。
全局设置依赖仓库镜像地址
在 ~/.gradle
目录(Windows系统是 C:\Users\用户\.gradle
目录)下创建 init.gradle.kts
文件,添加如下代码:
kotlin
val CENTRAL_URL = "https://repo.maven.apache.org/maven2"
val JCENTER_URL = "https://jcenter.bintray.com"
val GOOGLE_URL = "https://dl.google.com/dl/android/maven2"
val GRADLE_PLUGIN_URL = "https://plugins.gradle.org/m2"
val MIRROR_CENTRAL_URL = "https://maven.aliyun.com/repository/central"
val MIRROR_JCENTER_URL = "https://maven.aliyun.com/repository/jcenter"
val MIRROR_GOOGLE_URL = "https://maven.aliyun.com/repository/google"
val MIRROR_GRADLE_PLUGIN_URL = "https://maven.aliyun.com/repository/gradle-plugin"
val mirrorMap = mapOf(
CENTRAL_URL to MIRROR_CENTRAL_URL,
JCENTER_URL to MIRROR_JCENTER_URL,
GOOGLE_URL to MIRROR_GOOGLE_URL,
GRADLE_PLUGIN_URL to MIRROR_GRADLE_PLUGIN_URL
)
fun String.normalizeUrl(): String = this.trimEnd('/')
fun RepositoryHandler.replaceWithMirrorRepos(logger: Logger) {
val applyRepos = this.toList()
.filterIsInstance<MavenArtifactRepository>()
.associateWith { it.url.toString().normalizeUrl() }
.filter { (_, url) -> mirrorMap.containsKey(url) && !mirrorMap.containsValue(url) }
applyRepos.forEach { (repo, url) ->
val mirrorUrl = mirrorMap[url]!!
val nrp = maven { setUrl(mirrorUrl) }
remove(nrp)
val index = indexOf(repo)
add(index, nrp)
remove(repo)
logger.lifecycle("添加镜像(${index}): $url -> $mirrorUrl")
}
applyRepos.keys.forEach { repo ->
addLast(repo)
}
}
gradle.settingsEvaluated {
pluginManagement {
repositories {
replaceWithMirrorRepos(logger)
}
}
dependencyResolutionManagement {
repositories {
replaceWithMirrorRepos(logger)
}
}
}
allprojects {
buildscript {
repositories {
replaceWithMirrorRepos(logger)
}
}
repositories {
replaceWithMirrorRepos(logger)
}
}
该代码的作用是检查 settings.gradle.kts
和 build.gradle.kts
文件中的 repositories
配置,如果存在指定仓库地址且没有配置对应的镜像地址,则将对应的镜像地址替换至原地址的位置(保留查询顺序),并将原地址移至配置列表末端(保留原地址,避免镜像地址没有同步最新数据)。
这应该已经是目前最优的设置镜像仓库的方法,唯一遗憾的是,只能设置镜像仓库的 url,没办法将原仓库的其他配置(如content
)复制到镜像仓库的配置中。