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

                        }

                    }

                }

            }

        }

    }

}
相关推荐
寒山李白2 天前
关于Java项目构建/配置工具方式(Gradle-Groovy、Gradle-Kotlin、Maven)的区别于选择
java·kotlin·gradle·maven
yacolex4 天前
Mac安装使用Gradle
spring·macos·gradle
hweiyu005 天前
用 Gradle 实现自动化测试:集成 JUnit、TestNG,生成测试报告
junit·gradle
hweiyu006 天前
Spring Boot 项目集成 Gradle:构建、测试、打包全流程教程
java·spring boot·后端·gradle
TeleostNaCl14 天前
如何在 IDEA 中使用 Proguard 自动混淆 Gradle 编译的Java 项目
android·java·经验分享·kotlin·gradle·intellij-idea
leobertlan22 天前
好玩系列:脚本和插件使我快乐
前端·程序员·gradle
芦半山25 天前
快速应用「幽灵调用」的正式修复
android·gradle
猿小蔡1 个月前
Gradle 中 Maven 仓库配置
gradle
前行的小黑炭1 个月前
Android 不同构建模式下使用不同类的例子:如何在debug模式和release模式,让其使用不同的类呢?
android·kotlin·gradle
针叶2 个月前
解决Android Studio查找aar源码的错误
android·gradle·android studio