有用的命令:
| 1 | // 查看某个依赖具体是怎么引入的. | 
https://www.jetbrains.com/help/idea/creating-and-running-your-scala-application.html
https://docs.gradle.org/3.3/userguide/scala_plugin.html
https://dzone.com/articles/intellij-scala-and-gradle
http://www.cnblogs.com/davenkin/p/gradle-learning-4.html
http://www.cnblogs.com/davenkin/p/gradle-learning-1.html
git clone https://github.com/davenkin/gradle-learning.git
gradle task
gradle主要有两个元素:task和plugin.
如下task开头的就是task,没有task的就是project的属性(或扩展属性).
| 1 | task helloWorld << { | 
可以看出gradle也是有语法的.据说是groovy:
http://blog.csdn.net/wangbaochu/article/details/51177672
http://www.jianshu.com/p/37b46cc815b3
- 大括号之间的内容则表示传递给task()方法的一个闭包.
- << 表示向helloWorld中追加入执行代码——其实就是groovy代码.
- 执行命令: gradle helloWorld,表示执行helloWorld这个task.
- helloWorld是默认类型,copyFile是Copy类型的task.
task之间的依赖:
| 1 | task taskA(dependsOn: taskB) { | 
查看当前项目的task列表:(包括自带的tasks)
| 1 | gradle tasks --all | 
查看当前的属性配置列表:
| 1 | gradle properties | 
#执行顺序:
Gradle在执行Task时分为两个阶段,首先是配置阶段,然后才是实际执行阶段.
| 1 | task hello9 << { | 
配置在定义后,但依然能打印出this is hello9.
一个Task除了执行操作之外,还可以包含多个Property,其中有Gradle为每个Task默认定义的Property,比如description,logger等。另外,每一个特定的Task类型还可以含有特定的Property,比如Copy的from和to等。当然,我们还可以动态地向Task中加入额外的Property。
增量编译:
| 1 | //规定输入输出: | 
静态设置变量:
| 1 | version = 'this is the project version' | 
动态设置变量
| 1 | task showCommandLieProperties << { | 
调用命令:
| 1 | // 动态定义属性(命令行中定义),调用命令: | 
gradle复合项目
| 1 | //根项目: | 
可以在跟项目的build.gradle中定义所有子项目的task:
| 1 | // 方法1: | 
执行gradle forProject1时会级联查找所有项目的对应task.也可以显式得调用某个子项目的task:
| 1 | gradle :sub-project1:forProject1 | 
groovy语法:
http://blog.csdn.net/u014761700/article/details/51867939
gradle执行阶段:
Initialization phase
->hook1
->Configuration phase
->hook2
->Execution phase
->hook3
其中hook1:
| 1 | gradle.beforeProject{ | 
hook2:
| 1 | gradle.taskGraph.whenReady{ | 
hook3:
| 1 | gradle.buildFinished{ | 
- 初始化阶段执行settings.gradle
- 配置阶段解析每个project中的build.gradle
 ,以确定整个build的project以及内部的task关系.(即hook2中的task的有向图)
- 执行阶段
gradle包含三大对象: gradle对象,project对象,task对象.
一个project对象有多少task对象,往往由plugin对象决定. 
spring的gradle:
https://github.com/spring-projects/spring-scala/blob/master/build.gradle
gradle排除依赖:
| 1 | compile("org.springframework.boot:spring-boot-starter-web") { | 
maven也有类似的语法排除.
多版本库的选择:
- maven: 后面引入的覆盖前面的.可以使用shadow插件进行换名;
- gradle: 新版本覆盖旧版本.
