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

                        }

                    }

                }

            }

        }

    }

}
相关推荐
onkel in blog17 小时前
【Java】Gradle 多模块项目实战:Spring Boot 微服务搭建全流程
java·spring boot·微服务·gradle
彬sir哥3 天前
android studio如何把.gradle从C盘移到D盘
android·gradle·maven·android studio
kekegdsz9 天前
Android构建优化:编译速度从 10 分钟编译到 10 秒
android·性能优化·gradle
码农小卡拉16 天前
Maven与Gradle选型指南:如何匹配项目的依赖管理需求
java·gradle·maven
小当家.10521 天前
Maven与Gradle完整对比指南:构建工具深度解析
java·gradle·maven
indexsunny21 天前
互联网大厂Java面试实战:Spring Boot与微服务在电商场景的应用解析
java·spring boot·redis·微服务·kafka·gradle·maven
zhanglb1223 天前
Gradle 全局配置使用
gradle·android studio·intellij idea
Jennifer33K23 天前
AndroidStudio报错:minSdk(APl 33)> deviceSdk(APl 30)
android·gradle·android studio
fundroid1 个月前
使用 Gradle Convention Plugins(约定插件)优化 Android 编译配置
android·gradle·约定插件