Gradle实践

解决gradle下载慢的问题

在中国大陆使用gradle时,最常见的问题就是gradle本身及其包下载很慢,典型的,这种问题的解决办法就是使用国内镜像,对于gradle工具本身,可以使用腾讯公司提供的镜像下载,对于任一gradle项目,只需要修改项目根目录下的gradle/wrapper/gradle-wrapper.properties文件,将distributionUrl的值修改为腾讯提供的下载地址即可,可以打开https://mirrors.cloud.tencent.com/gradle/,找到对应版本,复制其链接地址即可,例如:

1
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip

除了gradle构建工具本身外,gradle下载依赖包也是很慢的,这同样可以使用国内镜像来解决,使用阿里云提供的镜像服务,可以参考其配置指南来为项目调整所使用的仓库,将如下内容加在项目的build.gradle文件里头,即可从阿里云镜像下载依赖包:

1
2
3
4
5
6
7
8
9
allprojects {
repositories {
maven {
url 'https://maven.aliyun.com/repository/public/'
}
mavenLocal()
mavenCentral()
}
}

如果不想更改项目特定的编译配置文件,或者想一劳永逸地为所有项目调整,则在用户主目录下的.gradle目录中创建init.gradle文件,并将如下内容加入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
allprojects {
repositories {
def ALIYUN_MIRROR = 'https://maven.aliyun.com/repository/public/'

all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository) {
def url = repo.url.toString()

if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_MIRROR."
remove repo
}
}
}

maven {
url ALIYUN_MIRROR
}
}
}

在实践中,除了最常见的Maven Central仓和jcenter仓外,可能还会使用到其它隐式引用,但又很慢的仓库,我们可以通过将如下内容加入到上面的init.gradle中,或项目的build.gradle中,来观察使用了哪些仓库:

1
2
3
4
5
6
7
8
allprojects {
tasks.register('showRepos') {
doLast {
println "All repos:"
println repositories.collect { it.url.toString() }
}
}
}

现在,可以在任一项目目录下,执行./gradlew showRepos命令查看用了哪些仓库,并设法寻找镜像网站来替代。