Gradle 镜像地址设置

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.ktsbuild.gradle.kts 文件中的 repositories 配置,如果存在指定仓库地址且没有配置对应的镜像地址,则将对应的镜像地址替换至原地址的位置(保留查询顺序),并将原地址移至配置列表末端(保留原地址,避免镜像地址没有同步最新数据)。

这应该已经是目前最优的设置镜像仓库的方法,唯一遗憾的是,只能设置镜像仓库的 url,没办法将原仓库的其他配置(如content)复制到镜像仓库的配置中。

相关推荐
~央千澈~10 天前
老项目Android开发环境搭建的困境与解决之道-优雅草卓伊凡
gradle·android开发·安卓开发
泓博12 天前
Gradle上传依赖包到私有仓库
gradle
yzpyzp16 天前
KAPT 的版本如何升级,是跟随kotlin的版本吗
android·kotlin·gradle
4060ti20 天前
gradle 入门
java·gradle
BoomHe20 天前
Android 搭建模块化项目流程及建议
android·架构·gradle
敲代码的剑缘一心21 天前
手把手教你学会写 Gradle 插件
android·gradle
5upport24 天前
Gradle Version Catalog的IDE辅助工具
gradle·android studio·intellij idea
zmm04201 个月前
Could not get unknown property ‘mUser‘ for Credentials [username: null]
jenkins·gradle
Digitally1 个月前
iTunes 无法备份 iPhone:10 种解决方法
ios·gradle·iphone