前言
Gradle 作为最常用的项目构建工具之一,Android 和 Java 相关的开发者在日常的工作中肯定是经常打交道的。由于无形的墙或本地复杂的网络环境,会导致依赖编译工具依赖插件或库文件下载缓慢或直接无法下载,项目无法编译打包。这时我们就可以通过设置下载镜像来解决这些问题,我们可以选择配置成公司或自己搭建的 Maven 服务,或者是使用公有云服务商的 Maven 镜像服务,比如阿里云或腾讯云等。这里是以使用阿里云为例,自建和其他的也是类似的设置方式,只是仓库的地址不同。
如何判断依赖插件或库文件无法下载
通常情况下,文件下载不了 Gradle 会直接报错显示到控制台窗口,这种情况就很容易看出问题;但是,有时候 Gradle 并没有报错,一切都看似正常的执行,只是处理 进度一直不动 或卡在某个 Task 里,这时可能就是某些文件下不来导致的。如何查看呢?在项目根目录下执行 Gradle 的脚本任务时加上 --debug 就可以看到 Gradle 编译时执行步骤的详细信息,这里面就可以看到相关的下载信息,可能输出信息会有点多。
# Windows 环境下执行
./gradlew.bat --debug
# *unix/Mac 环境下执行
./gradlew --debug
# 或
bash ./gradlew --debug
构建插件镜像加速
- 全局配置
如果你没有设置 GRADLE_HOME 环境变量的话,默认情况下在用户目录下的 .gradle/ 文件夹下创建文件 init.gradle (这个文件默认是没有创建的,需手动创建),添加以下配置信息即可
settingsEvaluated { settings ->
println "aliyun pluginManagement"
settings.pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
gradlePluginPortal()
}
}
}
- 项目级配置
在项目的根目录下 <project>/settings.gradle 文件中第一行加入,注意这配置必须要放在开头
pluginManagement {
println "aliyun pluginManagement"
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
gradlePluginPortal()
}
}
常规依赖库镜像加速
- 全局配置 用户根目录下/
.gradle/init.gradle
buildscript {
repositories {
println "aliyun repositories"
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
allprojects {
println "aliyun allprojects ${project.name}"
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
}
- 项目级配置 项目根路径/
build.gradle这里以 Spring Boot 为例,Android 项目也是类似
buildscript {
ext {
springBootVersion = '2.0.6.RELEASE'
}
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
gradlePluginPortal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.jacknic'
version = '1.0.0'
sourceCompatibility = 1.8
repositories {
println "aliyun repositories ${project.name}"
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
dependencies {
testImplementation('org.springframework.boot:spring-boot-starter-test')
implementation('org.springframework.boot:spring-boot-starter-web')
}
验证设置是否生效
在项目根路径下执行 .\gradlew.bat 就可以看到以下输入,可以看到我们在配置代码块的闭包中写的 println "aliyun xxxx" 字样的信息在控制台中打印出来,或者查看详细的信息还可以使用 --debug 参数,这样可以看到相关依赖文件的下载链接地址,这样就可以判断文件是否是从镜像站下载的
PS D:\dev\company\project> .\gradlew.bat
aliyun repositories
aliyun pluginManagement
aliyun allprojects app
aliyun allprojects module1
aliyun allprojects module2
aliyun allprojects module3
> Configure project :...
......
完整配置
- 全局配置
在用户根目录下 /
.gradle/init.gradle或者是你已配置的$GRADLE_HOME/init.gradle
// gradle全局配置
settingsEvaluated { settings ->
println "aliyun pluginManagement"
settings.pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
gradlePluginPortal()
}
}
}
buildscript {
repositories {
println "aliyun repositories"
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
allprojects {
println "aliyun allprojects ${project.name}"
repositories {
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
}
}
}
- 项目单独配置
插件镜像加速项目根目录/settings.gradle,需放在开头
pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
gradlePluginPortal()
}
}
rootProject.name = 'player'
注意点
- 全局配置和项目级配置的区别
- 全局配置是对所有有 Gradle 项目都生效的,但项目级的部分配置可能会覆盖全局的配置
- 项目级配置只对本项目生效,如部分项目需要配置 Maven 的私服可单独配置,并跟随git记录和提交
- Gradle 版本兼容问题
- 如果采取了全局配置的方式,可能会有部分版本兼容问题,旧版本的 Gradle 可能不存在部分配置闭包无法识别问题,这是可以将
init.gradle文件命名为其他名字即可,后续需要再重命名回来。
参考资料
-
Using Gradle Plugins docs.gradle.org/current/use…
-
阿里云仓库服务-指南-gradle 配置指南 developer.aliyun.com/mvn/guide