有用的命令:
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: 新版本覆盖旧版本.