Gradle速成
目录
groovy语法简介
先装个groovy,brew install groovy,然后groovysh进入命令行。注意dock里面会出现一个图标,这点比较蛋疼。
- 语法其实蛮类似js,但是是强类型,用
def声明变量支持类型推断,也可以直接声明类型; - 内置List
[]和Map[:],Map用索引操作符和dot效果一致。使用<<向List/Map中append元素; - 支持闭包,直接用
def a = {k-> println k}声明,隐藏参数it. - 支持类似bash的字符串格式化,即
${var};支持三引号的多行字符串;单双引号使用类似bash; - 支持范围赋值
1..5,支持直接写出正则(类似js),用=~判断match; - 类默认public;顶级表达式支持省略括号;
- 支持属性,可以直接赋值,但是也会隐式生成getter和setter以便和java保持兼容;
- 支持命名参数,默认构造函数可以直接通过命名赋值;
- 多属性赋值支持with语法;
- 支持
?非空判断,支持直接用==判断等于,判断同一个对象用is; - 更强的switch(类似模式匹配);
- True/False的判断类似python;
- groovy的方法重载,命中优先的是运行时类型(而不是声明时类型);
gradle基本概念
- projects和tasks,范围概念,从
<<语法来看,tasks显然是一个List,可以通过doFirst和doLast在头部和尾部插入任务; - task可以配置type,相当于父类;
- task里面写具体的groovy代码,执行具体的业务;
- 可以动态创建task;
- task可以被跳过,使用
onlyIf或者抛出StopExecutionException,或者将task的enabled属性设为false; - 定义任务的inputs和outputs属性,Gradle会通过快照对比,确定该任务是否需要执行。一个例子是C++的单文件编译,如果代码没有修改的话,就不需要再编译了。合理设置会大幅提升编译速度;
- 可以用
finalizedBy来指定finally任务; file函数总是相对于Gradle文件的路径,- Gradle的运行有配置阶段和执行阶段,可以加入对应的hook函数;
- 任务之间用
dependsOn声明依赖,也可以用taskA.mustRunAfter taskB之类的声明强依赖; - 可以直接声明函数供其他调用;
java构建
Gradle是一个配置工具,可以用来编译打包各种类型的项目。如果要用来搞java,就加入apply plugin: 'java'引入java插件,它会自动引入各种task。比如使用gradle build跑编译。
源文件路径:
| |
依赖,指明maven中央仓库:
| |
然后加入依赖:
| |
最后是编译task、测试task和打包task。
gradle配置项
类似pom.xml,Gradle有个build.gradle的配置文件。
gradle这个项目严格来说做的很差,各版本之间兼容性不佳,所以最好直接看需要使用版本的官方文档,网上的教程极可能不适合你在用的版本。
这玩意儿很难不让人想起前端领域的webpack.