美文网首页
Gradle 镜像地址设置

Gradle 镜像地址设置

作者: 斑马搬码 | 来源:发表于2025-07-03 14:47 被阅读0次

Gradle Wrapper 下载地址镜像

该地址无法在 init.gradle.kts 文件中设置,只能直接在项目中的 gradle-wrapper.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 文件,添加如下代码:

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 mavenRepos = this.toList()
        .filterIsInstance<MavenArtifactRepository>()
        .associateWith { it.url.toString().normalizeUrl() }
    
    val applyRepos = mavenRepos.filter { (_, url) -> 
        mirrorMap.containsKey(url) && !mavenRepos.containsValue(mirrorMap[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)复制到镜像仓库的配置中。

相关文章

网友评论

      本文标题:Gradle 镜像地址设置

      本文链接:https://www.haomeiwen.com/subject/mvdngjtx.html