一文搞通Gradle仓库配置
Gradle 作为一款构建工具,在依赖仓库的使用上,和Maven有相通的地方,也有不同的地方,这里,我们介绍在Gradle中,仓库配置的一些内容。
1. Gradle构建时需要从仓库获取什么?
我们一定要首先回答清楚这个问题,才能保证我们正确地配置了Gradle的仓库。Gradle在执行构建时,和Maven类似,需要获取下面两种依赖:
1.1 项目依赖
在项目开发中,项目依赖的第三方库信息,这部分依赖在工程的build.gradle中进行配置,如下面的配置信息:
dependencies {
implementation 'com.google.guava:guava:21.0'
testImplementation 'junit:junit:4.12'
}
这里表示当前项目有两个依赖,其中 guava 是项目依赖,在编译、打包、运行等阶段都会使用,junit 是单元测试依赖,只有在测试阶段使用。
这些依赖,会在项目构建时,下载下来使用(如果使用IDEA等IDE开发,则在编码阶段,IDE会辅助下载相关依赖,保证编码顺畅)。
1.2 插件依赖
我们都知道,Gradle和Maven都是插件化开发,在声明周期不同的阶段,都是通过不同的插件来完成的。项目构建需要哪些依赖,都会在项目的build.gradle中进行配置,如下的配置示例:
plugins {
id "jacoco"
id "java"
id "application"
id "org.sonarqube" version "3.1.1"
}
上面的示例中,依赖了四个插件,分别是 jacoco,java,application,org.sonarqube。
上面依赖的四个插件,都是二进制插件(还有一种插件为脚本插件,不是我们当前插件依赖介绍的范围)。二进制插件应用是通过设置他们的ID来生效的,插件ID是插件的全局唯一标识符,可以通过插件ID查找到插件坐标。
Gradle在构建时,如果需要应用到特定的插件,并且本地仓库没有,则需要从远端下载使用。
2. Gradle仓库配置
在第1节,介绍了Gradle需要下载的依赖有哪些,那么,针对下载的不同的内容,就需要进行不同的设置。我们将分别针对项目依赖和插件依赖,如何在项目中和全局配置。
2.1 项目依赖仓库配置
对于项目依赖仓库配置,如果只是希望对当前gradle工程生效,可以直接在项目根路径的 build.gradle 中进行配置,配置方法如下:
repositories {
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://repo.huaweicloud.com/repository/maven" }
mavenLocal()
mavenCentral()
}
如果是想要针对全局生效,可以放到 ~/.gradle/init.gradle 文件中进行配置,如下:
allprojects {
repositories {
maven { url "https://maven.aliyun.com/repository/public" }
maven { url "https://repo.huaweicloud.com/repository/maven" }
mavenLocal()
mavenCentral()
}
}
阿里云的maven仓,已经同步了很多maven源,参考:https://maven.aliyun.com/mvn/guide,可以基于需要进行配置,如果公司内部,有自己的私服,也可以直接在上面使用 maven { url ""} 进行配置。
2.2 插件依赖仓库配置
在Gradle中,设置项目依赖仓库,是不会直接对插件依赖仓库生效的,需要对插件依赖仓库进行单独配置。
如果希望配置只对当前项目生效,可以在项目根路径下面的 settings.gradle 中直接进行配置,配置方法如下(注意,这个内容一定要放在settings.gradle最前面):
pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
mavenLocal()
mavenCentral()
gradlePluginPortal()
}
}
如果希望配置全局有效,可以在 ~/.gradle/init.gradle 文件中进行配置,如下:
settingsEvaluated { settings ->
settings.pluginManagement {
repositories {
maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
mavenLocal()
mavenCentral()
gradlePluginPortal()
}
}
}
阿里云和华为云都有提供Maven镜像仓库(如前面的配置,Gradle 一般都是配置 Maven镜像仓库),但是当前我查看了阿里云和华为云镜像仓库的源,阿里云有同步Gradle插件仓库源(https://plugins.gradle.org/m2/),华为云还没有,所以设置Gradle插件的仓库,还需要配置阿里云Maven仓库。
3. 初始化脚本(init脚本)配置
在上面小节,在全局仓库配置时,都是配置到 init.gradle 文件中,这里简单对 init 脚本进行一些介绍(当然,个人推荐不要做一些花里胡哨的操作,一直简单就是美,但是如果有特殊需求,可以考虑下面的配置)。
3.1 什么是初始化脚本
初始化脚本和项目中的build.gradle类似,只不过这些初始化脚本,会优先于build.gradle执行,因此可以在这些初始化脚本里面做一些前期动作,例如:定义一些全局的插件、仓库信息、环境变量信息(例如JDK安装路径)、构建监听器等。初始化脚本,扩展名为 .gradle。
3.2 初始化脚本使用
初始化脚本有不同的生效方法,下面是几种可以使初始化脚本生效的方法:
(1) 在命令行中,使用 -I 或者 --init-script 指定,此时初始化脚本命名只需要 .gradle 结尾,并且放到任意位置,可以指定一个或者多个 初始化脚本,但是一定要保证指定的初始化脚本存在,否则就直接报错;
(2) 初始化脚本命名为 init.gradle,放到 USER_HOME/.gradle 目录下,将自动生效;
(3) 初始化脚本以 .gradle 扩展名命名,放到 USER_HOME/.gradle/init.d 目录下,也是自动生效;
(4) 初始化脚本以 .gradle 扩展名命名,放到 GRADLE_HOME/init.d 目录下,将自动生效。
如果上面四类初始化脚本都存在,则按照上面的顺序生效,如果在同一个层级有多个初始化脚本,则以初始化脚本名字排序生效。
关于初始化脚本的更详细信息,可以查看下面的参考文档。
4. 参考
华为开源镜像站:https://mirrors.huaweicloud.com/
阿里云云效Maven:https://maven.aliyun.com/mvn/guide
Gradle插件帮助文档:https://docs.gradle.org/current/userguide/plugins.html
Gradle init script帮助文档:https://docs.gradle.org/current/userguide/init_scripts.html
- 点赞
- 收藏
- 关注作者
评论(0)