Gradle自动化构建项目
Gradle简介
Gradle 是新一代的自动化构建工具。本文参考《疯狂Android讲义 kotlin版》一书,将简单介绍一些gradle的使用。
Gradle构建文件和创建任务
指定构建文件
运行gradle命令时没有指定任何参数,Gradle会在当前目录下搜索build.gradle文件,以其作为构建文件,并执行指定任务。
可以使用gradle -b <构建文件>的命令来使用其他构建文件。
Gradle构建文件的结构
Project:通常一个构建文件代表一个项目(代表当前目录下的项目),其包含大量属性和方法。
TaskContainer:任务容器。每个Project都会维护一个TaskContainer类型的tasks对象。
Task:gradle要执行的一个任务。
Action:task中运行阶段执行的代码块。
Gradle构建过程
第一阶段:配置阶段,gradle会读取构建文件(build.gradle)的全部内容来配置Project和Task;
第二阶段:按依赖关系执行指定Task。
显式执行指定任务
gradle [task1[task2[task3…]]]
运行结果:仍会先执行构建文件的配置部分,然后才执行Task中的Action
创建Task的常用方法
调用Project的task()方法创建Task;
调用TaskContainer的create()方法创建Task。
创建Task的常用步骤
通过传入的代码块参数配置Task;
可以通过Task的doFirst、doLast方法指定Action的执行顺序。
可以通过Project自带的TaskContainer类型的tasks对象的create方法来创建Task;
通过crate方法的name参数指定该Task的名称;
通过crate方法的dependsOn参数指定该Task所依赖的其他Task;
通过crate方法的type参数指定该Task的类型。
也可以通过task 任务名的方式创建Task;
然后通过代码块配置Task的参数。
常见的任务类型
Copy:拷贝,指定from(从哪复制)、into(复制到哪)等参数;
JavaCompile:编译,指定source(编译的源代码目录)、destinationDir(编译后的字节码文件保存位置)等参数;
JavaExec:执行文件,指定main文件(指定入口文件,通常编写一些插件会用到)。
待续
Gradle的属性
为已有属性指定属性值
常用属性:name、path、description、buildDir、version;实际意义不大,很少配置。
添加属性
通过ext添加属性
在构建文件中(即代表当前目录下的project)通过ext.prop1 = 'xxx’即可添加project的属性;
在构建文件中(即代表当前目录下的project)通过代码块
ext {
prop1 = 'xxx'
prop2 = 'xxx'
}
的形式添加project的属性。
在task中(即task配置中)通过ext.prop1 = 'xxx’即可添加task的属性;
在task中(即task配置中)通过代码块
ext {
prop1 = 'xxx'
prop2 = 'xxx'
}
的形式添加task的属性。
通过运行gradle命令时-P、-D选项来添加属性
只能添加Project属性,-D代表Project的JVM属性。
增量式构建
通过指定task的输入输出配置,只要指定的输入配置及其属性都不变化,那么gradle就认为该任务的输入没有改变,第二次执行该命令时不再真正执行该任务。
Gradle插件
通过引用gradle插件,即可引入已经编辑完成的构建文件(仍代表当前目录下的项目),提高效率;
通过引用gradle插件,也可以为gradle插件配置属性及调用方法:
例如常见的java、application、library等插件,为其指定sourceSets对象属性,这些插件的task会用到这些属性(当然不配置也会有默认值)。如何配置这些插件是主要学习的地方。
一些常见插件的配置
待补充
自定义插件(构建文件)
在build.gradle中自定义插件类,并引用;
通过groovy文件类的形式,通过含包名的类引用;
新建一个module,制作一个库(插件),并引用。
可以参考本地磁盘maven仓库的使用以及点击事件埋点
自定义任务类型
其他任务可指定为自定义任务类型即可调用该自定义任务的方法。
在build.gradle中自定义任务(即自定义任务类型,通过继承DefaultTask类);
通过groovy文件类的形式,通过含包名的类引用;
新建一个module,制作一个库(插件),并引用。
依赖管理
依赖管理是gradle自带的属性对象。gradle既可以从远程仓库或者本地仓库(远程也会先下载到本地)依赖jar包,也可以直接引用项目路径下的jar包。
配置依赖的步骤
1、为Gradle配置仓库;
2、为不同的组配置依赖jar包。
依赖配置中组的概念
通过配置project的configurations属性配置组名,而组名通常会被task引用,然后该组名下所依赖的jar成了某一类型task或某一些类型task所依赖的jar包。
常见依赖组:
implementation:主项目源代码(src/main/java,也可通过sourceSets配置)所依赖的组;
compileOn:主项目源代码(src/main/java,也可通过sourceSets配置)编译时才依赖的组;
runtimeOnly:主项目源代码(src/main/java,也可通过sourceSets配置)运行时才依赖的组;
testImplementation:项目测试代码(src/test/java,也可通过sourceSets配置)所依赖的组;
testCompileOn:项目测试代码(src/test/java,也可通过sourceSets配置)编译时才依赖的组;
testRuntimeOnly:项目测试代码(src/test/java,也可通过sourceSets配置)运行时才依赖的组;
archives:项目打包时依赖的组,可用于制作jar包等。
编辑于2019年6月29日