Gradle总结-创新互联
下载方式
通过官网 Gradle Distributions 可以直接下载对应版本的Gradle,包括all/bin/src,分别对应全部内容/可执行文件/源码。
通常团队中或集体项目中使用以wrapper的方式配置,如果直接以bin配置,bin文件夹中压缩包都至少有上百MB,存储传输都不方便。wapper只包含一个jar以及对应的配置文件,使用时通过执行gradlew下载配置对应版本的gradle就很方便。
首先下载gradle的bin文件,通过调用 .gradle wrapper 即可生成wrapper文件,配置到项目中传播使用即可。
GradleUserHome
当前环境中可配置多个UserHome,但没必要,使用同一个可以共用缓存依赖节省时间。
gradlew构建任务顺序
- 判断本地是否安装gradlew对应版本的gradle,如果没有下载安装。
- 查找对应版本的Daemon,如果没有先启动Daemon,后台Daemon无任务最多存活5小时。整体是C/S模式,主要任务在后台Daemon中完成,前后台通过Socket方式通信。有后台运行的Daemon时,Gradle任务启动速度很快。
例如首次启动,会提示“Starting a Gradle Daemon..”表明启动Daemon虚拟机。之后再次启动仅创建Client Gradle,速度会快很多。以下图为例,首次启动3s,再次启动仅1s。
一般后台Gradle存活时间是5小时,没必要手动停止。如果要停止的话可以通过./gradlew --stop命令。
Groovy语言 The Apache Groovy programming language - Documentation强引用 + 动态调用
可以在AndroidStudio的Tools/Groovy Console中开启编辑Groovy的窗口。
目前在用到的Groovy的语法中,个人感觉最重要的是闭包的感念,在kotlin的使用过程中,闭包已经非常熟悉。
- Groovy DSL中不引起歧义的话方法可以不写();
- 闭包如果是最后一个参数,调用时可以放在()的后面;
Initialization
Gradle支持单项目构建和多项目构建。在初始化阶段,Gradle会决定将哪些工程添加到构建中,并且为参与构建的工程创建一个Project的实例对象。
Configuration
配置所有参与构建的工程,执行工程中配置的build.gradle脚本的内容。执行过程中build.gradle是自上而下的顺序执行。
创建任务
Task task(String task, Closure closure);
其中的闭包closure参数在configure阶段会执行以配置task。
doLast
Task doLast(Closure closure)
将closure函数添加到当前任务的末尾。当执行完任务后执行此closure。
Execution
根据命令行中的参数确认任务名称并继续执行。
Gradle模型Project
build.gradle可以理解为一个Project对象,其中所有的无主方法都是Project的成员函数。
// 在Project配置完成后回调
void afterEvaluate(Closure closure)
// 在Project配置前回调
void beforeEvaluate(Closure closure)
// 多项目构建中所有项目执行的操作
void allprojects(Closure closure);
// configuration 阶段依赖的类路径的配置
void buildscript(Closure closure);
// 获取文件句柄
File file(Object f);
// 多项目构建中通过project名称获取project对象
Project findProject(String projectName);
// 当前build.gradle所在工程的build文件夹路径,可能还未创建但构建的输出一定是在这个目录下
File getBuildDir();
Task
// 任务执行末尾添加闭包内操作
Task doLast(Closure closure);
// 任务执行依赖的任务obj 可以为task的name
Task dependsOn(Object... obj);
Gradle插件编写插件复用
通过实现Plugin接口,封装插件方法。
class MyPlugin implements Plugin{
@Override
void apply(Project project) {
// 注意是task是Project的成员函数。直接写task('mt')表示是MyPlugin方法会报错
project.task('mt') {
println 'this is MyPlugin Task'
}
}
}
通过apply函数引用: apply(new HashMap('plugin': MyPlugin)) 加糖简写为: apply plugin: MyPlugin
apply plugin: MyPlugin
除此之外,还可以apply plugin: ‘https://www.xxx.xx’ 路径方式引入云端资源。
二进制Binary插件
在Gradle的configuration阶段会应用插件的配置,所以需要在buildScript的dependencies中添加仓库的地址。例如引用apatch的commons库。
import org.apache.commons.lang3.StringUtils
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'org.apache.commons', name: 'commons-lang3', version: '3.9'
}
}
if (StringUtils.isBlank('')) {
println 'is Empty'
}
如果自己定义gradle二进制插件步骤:
- 实现Plugin接口,重写apply方法
- 在META-INF/gradle-plugins下配置{cc.cc}.properties文件,{cc.cc}即为插件ID
- 在上步的properties文件中,implementation-class={Plugin接口实现类}即插件入口类
使用步骤:
- 在buildScript的classpath添加二进制仓库地址
- apply plugin: 插件ID
buildScript插件
与二进制类似,约定俗成的将buildSrc的类路径添加到了buildScript的classpath中,无需特殊添加。
所谓自定义Plugin即实现Plugin接口,重写apply接口。
public class MyPlugin implements Plugin{
@Override
public void apply(Project project) {
project.task("MyTask", task ->{
});
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章题目:Gradle总结-创新互联
链接分享:http://ybzwz.com/article/epdsj.html