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基本概念

  1. projects和tasks,范围概念,从<<语法来看,tasks显然是一个List,可以通过doFirstdoLast在头部和尾部插入任务;
  2. task可以配置type,相当于父类;
  3. task里面写具体的groovy代码,执行具体的业务;
  4. 可以动态创建task;
  5. task可以被跳过,使用onlyIf或者抛出StopExecutionException,或者将task的enabled属性设为false;
  6. 定义任务的inputs和outputs属性,Gradle会通过快照对比,确定该任务是否需要执行。一个例子是C++的单文件编译,如果代码没有修改的话,就不需要再编译了。合理设置会大幅提升编译速度;
  7. 可以用finalizedBy来指定finally任务;
  8. file函数总是相对于Gradle文件的路径,
  9. Gradle的运行有配置阶段和执行阶段,可以加入对应的hook函数;
  10. 任务之间用dependsOn声明依赖,也可以用taskA.mustRunAfter taskB之类的声明强依赖;
  11. 可以直接声明函数供其他调用;

java构建

Gradle是一个配置工具,可以用来编译打包各种类型的项目。如果要用来搞java,就加入apply plugin: 'java'引入java插件,它会自动引入各种task。比如使用gradle build跑编译。

源文件路径:

1
2
3
4
5
6
7
8
9
10
11
sourceSets{
//修改默认目录,下面还是和默认位置一样,如需配置其他目录修改即可
main{
java{
srcDir 'src/java'
}
resources{
srcDir 'src/resources'
}
}
}

依赖,指明maven中央仓库:

1
2
3
repositories {
mavenCentral()
}

然后加入依赖:

1
2
3
4
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}

最后是编译task、测试task和打包task。

gradle配置项

类似pom.xml,Gradle有个build.gradle的配置文件。

gradle这个项目严格来说做的很差,各版本之间兼容性不佳,所以最好直接看需要使用版本的官方文档,网上的教程极可能不适合你在用的版本。

这玩意儿很难不让人想起前端领域的webpack.