一个脚本让您的Gradle项目下载速度起飞

首发于Enaium的个人博客


前言

Gradle是一个非常优秀的构建工具,但用过Maven的人都知道,Maven可以设置镜像,加速下载速度,而Gradle却没有这个功能。因为Gradle没有Maven这么死板的概念,在Gradle中大部分功能都是通过脚本实现的,所以我们可以通过脚本来实现镜像的功能。

首先需要了解一下什么是Initialization scriptsInitialization scriptsGradle的初始化脚本,它可以在Gradle启动时执行,Gradle会在执行构建之前执行初始化脚本,也就是说我们可以在这个时候编写替换仓库地址的脚本,这样就可以实现镜像的功能。

脚本

首先我们需要再用户目录下的.gradle的目录下创建一个init.gradle.kts文件,然后在这个文件中编写脚本。

首先使用apply给脚本添加一个EnterpriseRepositoryPlugin插件,之后编写一个类实现Plugin接口,然后我们在apply方法中编写替换仓库地址的逻辑。

kotlin 复制代码
apply<EnterpriseRepositoryPlugin>()

class EnterpriseRepositoryPlugin : Plugin<Gradle> {

    override fun apply(gradle: Gradle) {

  


    }

}

首先我们创建一个派生类,在这个派生类中定义一些常量,这些常量是我们要替换的仓库地址。

kotlin 复制代码
companion object {

    const val CENTRAL = "https://maven.aliyun.com/repository/central"

    const val GRADLE_PLUGIN = "https://maven.aliyun.com/repository/gradle-plugin"

}

之后在这里使用gradle.settingsEvaluated方法,这个方法会在settings.gradle文件被解析之后执行,我们可以在这个方法中编写替换插件仓库地址的逻辑。

kotlin 复制代码
gradle.settingsEvaluated {

    pluginManagement {

        repositories {

            all {

                if (this is MavenArtifactRepository) {

                    val url = this.url.toString()

                    if (url.startsWith("https://repo1.maven.org/maven2") || url.startsWith("https://repo.maven.apache.org/maven2")) {

                        this.setUrl(CENTRAL)

                    }

                    if (url.startsWith("https://plugins.gradle.org/m2")) {

                        this.setUrl(GRADLE_PLUGIN)

                    }

                }

            }

        }

    }

}

在完成插件的仓库地址替换之后,我们还需要替换项目的仓库地址,逻辑和替换插件的仓库地址一样。

kotlin 复制代码
gradle.allprojects {

    repositories {

        all {

            if (this is MavenArtifactRepository) {

                val url = this.url.toString()

                if (url.startsWith("https://repo1.maven.org/maven2") || url.startsWith("https://repo.maven.apache.org/maven2")) {

                    this.setUrl(CENTRAL)

                }

                if (url.startsWith("https://plugins.gradle.org/m2")) {

                    this.setUrl(GRADLE_PLUGIN)

                }

            }

        }

    }

}

这样完成之后,我们就可以飞快的下载项目中的插件和依赖了。

kotlin 复制代码
apply<EnterpriseRepositoryPlugin>()

class EnterpriseRepositoryPlugin : Plugin<Gradle> {

  


    companion object {

        const val CENTRAL = "https://maven.aliyun.com/repository/central"

        const val GRADLE_PLUGIN = "https://maven.aliyun.com/repository/gradle-plugin"

    }

  


    override fun apply(gradle: Gradle) {

        gradle.settingsEvaluated {

            pluginManagement {

                repositories {

                    all {

                        if (this is MavenArtifactRepository) {

                            val url = this.url.toString()

                            if (url.startsWith("https://repo1.maven.org/maven2") || url.startsWith("https://repo.maven.apache.org/maven2")) {

                                this.setUrl(CENTRAL)

                            }

  


                            if (url.startsWith("https://plugins.gradle.org/m2")) {

                                this.setUrl(GRADLE_PLUGIN)

                            }

                        }

                    }

                }

            }

        }

  


        gradle.allprojects {

            repositories {

                all {

                    if (this is MavenArtifactRepository) {

                        val url = this.url.toString()

                        if (url.startsWith("https://repo1.maven.org/maven2") || url.startsWith("https://repo.maven.apache.org/maven2")) {

                            this.setUrl(CENTRAL)

                        }

  


                        if (url.startsWith("https://plugins.gradle.org/m2")) {

                            this.setUrl(GRADLE_PLUGIN)

                        }

                    }

                }

            }

        }

    }

}
相关推荐
唐青枫15 小时前
Java Gradle 实战指南:从 Wrapper、Kotlin DSL 到 Spring Boot 多模块构建
java·kotlin·gradle
蜡台3 天前
通过Gradle脚本声明更改Java变量
android·java·开发语言·python·kotlin·gradle·groovy
AI产品实战10 天前
Gradle打包生成dependencies.xml详解
xml·java·gradle
二宝哥15 天前
Gradle离线安装
gradle
二宝哥16 天前
springboot项目使用Gradle工具实现依赖版本控制
java·spring boot·后端·gradle·版本
一粒代码19 天前
告别手动打包:Android AAB 构建签名 + ProGuard 规则 + CI/CD 自动化实战
gradle
方白羽1 个月前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
黄林晴1 个月前
告别无效重建:Gradle 9.6.0 解决 CI 构建缓存失效痛点告别无效重建:Gradle 9.6.0 解决 CI 建筑缓存失效痛点
android·gradle
hashiqimiya1 个月前
gradle的环境http配置
gradle
鹧鸪晏2 个月前
Android 项目里众多的gradle文件,你知道他们是什么吗
gradle