Gradle是一种自动化构建工具,在同领域的产品有Ant和Maven。Gradle可以用Groovy或Kotlin编写的DSL来帮助我们构建。
构建就是把代码文件转化为可在计算机独立运行的软件制品的过程,以java为例,构建分为:编译和打包的操作
如果人工进行构建的话需要用到javac、jar等命令,且构建过程比较繁琐,也容易出错,这时就需要自动化构建工具帮我们进行自动构建
下面将演示用gradle来从零开始构建项目,我们创建好项目之后可以在命令行中使用 gradle init 命令来初始化项目,然后可以进行相应的选项
选择哪种语言来编写DSL,一般选Groovy
选择哪种测试框架,这里选JUnit5也就是4选项
填写好项目名和包名后,gradle就完成了项目的初始化生成
使用 gradle build 命令即可完成一次项目构建
我们来考虑下面两个问题:
1.如何保证大家本地安装的Gradle版本的一致性?
2.服务器端构建,分配到的服务器没有安装Gradle,如何进行构建?
Gradle Wrapper则是用来解决上面两个问题的方案——把gradle装进盒子里,这个盒子就是wrapper
当你需要某个版本的gradle的时候,gradle wrapper就会去gradle的官方服务器下载对应版本
在项目的gradle-wrapper.properties配置文件我们可以看到,gradle的远程下载地址,以及本地的存放地址(前两行的地址拼接)
这样通过配置文件配置gradle就解决了上面两个问题,我们把这个配置文件push到仓库,同事拉去下来也就制定好了gradle的版本,同时如果机子没有gradle的话会自动去下载
在gradle中task就是一系列的操作任务,例如我们有如下五种常见的task
clean | 清理构建产物(./gradlew clean) |
build | 执行构建(./gradlew build) |
test | 运行测试(./gradlew test) |
tasks | 查看所有tasks(./gradlew tasks) |
help | 查看帮助信息(./gradlew help --task build) |
task的执行也是有依赖的,即一个大的task会有几个小的task构成
使用./gradlew xxx --dry-run命令即可查看名字为xxx的task命令的构成
如果./gradlew build -x test
依赖管理
在build.gradle文件里我们可以进行项目的依赖管理,我们只需往dependencies里添加我们需要的类库的坐标即可
需要注意的是坐标前的关键字不同会产生不同的效果
api | 能访问依赖库所依赖的库的方法 |
implementation | 依赖的库只能自己库本身访问,举个例子,A依赖B,B依赖C,如果B依赖C是使用的implementation依赖,那么在A中是访问不到C中的方法的 |
compileOnly | 只在编译的时候有效, 不参与打包 |
runtimeOnly | 只在打包的时候有效,编译不参与 |
testImplementation | 在单元测试和打包测试apk的时候有效 |
如果你依赖了库A的1.0版本,又依赖了库B,这个库B依赖了库A的2.0版本,此时就发生了版本冲突问题
1.我们可以手动去除冲突的依赖,在冲突的库选一个进行exclue
implementation ('com.carlos.test:Test:1.0.0') { exclude group: "io.reactivex.rxjava2",module: "rxjava" // exclude group: "io.reactivex.rxjava2:rxjava:2.1.11" } implementation 'io.reactivex.rxjava2:rxjava:2.1.13'
2.我们可以强制使用某版本依赖
configurations.all { resolutionStrategy { force 'io.reactivex.rxjava2:rxjava:2.1.13' } }