一个脚本让您的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)

                        }

                    }

                }

            }

        }

    }

}
相关推荐
明川1 天前
Android Gradle - ASM + AsmClassVisitorFactory插桩使用
android·前端·gradle
Coffeeee3 天前
Android15适配之世上本无坑,targetSdkVersion升到35后全是坑
android·前端·gradle
明川5 天前
Android Gradle学习 - Gradle插件开发与发布指南
android·前端·gradle
原来是好奇心7 天前
深入Spring Boot源码(一):环境搭建与初探项目架构
java·gradle·源码·springboot
阿拉斯攀登8 天前
Maven VS Gradle
gradle·maven
聊天QQ:276998859 天前
COMSOL 实现六方光子晶体 TE、TM 模式能带及电场仿真
gradle
明川12 天前
Android Gradle 学习 - 生命周期和Task
android·前端·gradle
明川17 天前
Android Gradle 学习 - Kts Gradle学习
前端·gradle
安卓程序猿1 个月前
kotlin build.gradle.kts下修改APK的输出名称
android·kotlin·gradle
精装机械师1 个月前
在IntelliJ IDEA编辑器中基于Gradle编译器搭建Kotlin开发环境遇到的各种坑
kotlin·gradle·intellij-idea