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

相关推荐
方白羽7 天前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
黄林晴7 天前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
hashiqimiya17 天前
gradle的环境http配置
gradle
鹧鸪晏25 天前
Android 项目里众多的gradle文件,你知道他们是什么吗
gradle
plainGeekDev1 个月前
RecyclerView.Adapter → ListAdapter
java·kotlin·gradle
plainGeekDev1 个月前
findViewById → ViewBinding
java·kotlin·gradle
帅次1 个月前
Jetpack Compose 动画实战:animateFloatAsState、AnimatedVisibility 与 graphicsLayer 避坑
android·kotlin·gradle·android jetpack
Carson带你学Android1 个月前
告别复杂的 Gradle 配置!JetBrains Amper 0.10 发布:用 YAML 构建 Kotlin/Android 项目
kotlin·gradle
Java小学生丶1 个月前
记录一下我的 Gradle 开发环境配置过程
android·java·gradle·maven·安卓
绿色水杯0071 个月前
Android Gradle 依赖分析器
gradle