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)复制到镜像仓库的配置中。

相关推荐
安冬的码畜日常8 天前
【JUnit实战3_20】第十一章:用 Gradle 运行 JUnit 测试实战
测试工具·junit·单元测试·gradle·软件构建·groovy·junit5
ClassOps8 天前
Gradle Groovy 和 Kotlin kts 语法对比
android·kotlin·gradle·groovy
I'm Jie10 天前
Gradle 的项目结构与源码集(Source Sets)详解(Kotlin DSL)
android·java·开发语言·spring boot·spring·kotlin·gradle
林栩link10 天前
【车载Android】Gradle自定义插件从编写到发布
android·gradle
hweiyu0013 天前
Gradle 与 CI/CD 集成:Jenkins/GitHub Actions 自动化构建配置
ci/cd·github·jenkins·gradle
I'm Jie13 天前
(二)Gradle 依赖仓库及安全凭证配置
java·spring boot·spring·gradle·maven
I'm Jie14 天前
(五)Gradle 依赖传递与冲突处理
java·spring boot·spring·kotlin·gradle·maven
hweiyu0015 天前
Gradle 增量构建与构建缓存:自定义 Task 如何实现 “只构建变化内容”?
gradle·1024程序员节
hweiyu0015 天前
Gradle 构建脚本迁移:从 Groovy DSL 到 Kotlin DSL,语法与技巧对比
开发语言·kotlin·gradle