动态

详情 返回 返回

一個腳本讓您的Gradle項目下載速度起飛 - 动态 详情

首發於Enaium的個人博客


前言

Gradle是一個非常優秀的構建工具,但用過Maven的人都知道,Maven可以設置鏡像,加速下載速度,而Gradle卻沒有這個功能。因為Gradle沒有Maven這麼死板的概念,在Gradle中大部分功能都是通過腳本實現的,所以我們可以通過腳本來實現鏡像的功能。

首先需要了解一下什麼是Initialization scriptsInitialization scriptsGradle的初始化腳本,它可以在Gradle啓動時執行,Gradle會在執行構建之前執行初始化腳本,也就是説我們可以在這個時候編寫替換倉庫地址的腳本,這樣就可以實現鏡像的功能。

腳本

首先我們需要再用户目錄下的.gradle的目錄下創建一個init.gradle.kts文件,然後在這個文件中編寫腳本。

首先使用apply給腳本添加一個EnterpriseRepositoryPlugin插件,之後編寫一個類實現Plugin接口,然後我們在apply方法中編寫替換倉庫地址的邏輯。


apply<EnterpriseRepositoryPlugin>()

class EnterpriseRepositoryPlugin : Plugin<Gradle> {

    override fun apply(gradle: Gradle) {

  


    }

}

首先我們創建一個派生類,在這個派生類中定義一些常量,這些常量是我們要替換的倉庫地址。


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文件被解析之後執行,我們可以在這個方法中編寫替換插件倉庫地址的邏輯。


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)

                }

            }

        }

    }

}

這樣完成之後,我們就可以飛快的下載項目中的插件和依賴了。


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)

                        }

                    }

                }

            }

        }

    }

}
user avatar king_wenzhinan 头像 xiaoniuhululu 头像 sofastack 头像 AmbitionGarden 头像 tech 头像 fengyan_60cea4fbda03d 头像 diboot 头像 lvlaotou 头像 ahahan 头像 jkdataapi 头像 lenve 头像 aipaobudezuoyeben 头像
点赞 28 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.