打开build.gradle
文件,并在末尾添加如下内容:闭包
println "1" task howdy { println "2" doLast { println "Howdy" } }
println "3"
这将演示有关Gradle脚本如何工做的一些信息。使用如下命令运行它:gradle
./gradlew howdy
ui
您将看到(省略了一些多余的行):插件
> Configure project : 1 2 3 > Task :howdy Howdy
在这里,Configure project
任务将生成并运行生成脚本。在Gradle执行Configure project
任务时,它会执行如下操做:命令行
它打第一个println
并打印“1”
它找到要执行的howdy
任务定义块,一个闭包,并显示“2”。请注意,它不会执行doLast
关闭操做,所以还没有打印“Howdy”。
它继续执行脚本,直到第四个println
,而后打印“3”。
至此,构建脚本自己已完成对构建环境的配置。下一步是执行命令行中指定的全部任务,在本例中为howdy
任务。code
这是task.doLast{}
执行块的地方,所以您会在输出中看到“Howdy”字样。继承
doLast
是该块的别称;它的真正含义是相似于“任务操做”,而外部块是任务配置。文档
task howdy { // 始终在初始构建脚本配置期间执行 doLast { // 仅在任务自己被调用时执行 } // 始终在初始构建脚本配置期间执行 }
使用Graovy DSL根据Gradle文档定义任务的各类方法以下:get
task taskName task taskName { configure closure } task taskName(type: SomeType) task taskName(type: SomeType) { configure closure }
只是为了锤炼,在运行构建脚本时当即执行“配置闭包”,而在doLast
专门执行任务时执行在配置闭包中定义的闭包。产品
将第二个自定义任务添加到build.gradle
文件:
task partner { println "4" doLast { println "Partner" } } println "5"
若是您./gradlew partner
看到的是:
> Configure project : 1 2 3 4 5 > Task :partner Partner
若是您但愿一个自定义任务依赖另外一个任务怎么办?这简单。build.gradle
在定义两个自定义任务以后,将如下行添加到文件中的某处。
partner.dependsOn howdy
并运行:./gradlew partner
... > Task :howdy Howdy > Task :partner Partner
您也可使用task属性表示相似的关系finalizedBy。若是将dependsOn行替换为:
howdy.finalizedBy partner
并运行:/gradlew howdy。
... > Task :howdy Howdy > Task :partner Partner
您获得相同的输出。固然,他们表达不一样的关系。
关于任务的最后一点:在实践中,您不多编写自定义任务来讲诸如“Howdy Partner”之类的东西(我很难相信,我知道)。实际上,一般您会覆盖已经定义的任务类型。例如,Gradle定义了Copy一个将文件从一个位置复制到另外一个位置的任务。
这是一个将文档复制到构建目标的示例:
task copyDocs(type: Copy) { from 'src/main/doc' into 'build/target/doc' }
当您意识到build.gradle
文件其实是一个Groovy脚本时,就可使用Groovy和Gradle的真正功能,若是须要,您能够执行任意代码来过滤和转换这些文件。
下面的任务转换每一个副本文件并排除.DS_Store
文件。DSL很是灵活。您可使用from
和多个块excludes
,也能够执行诸如重命名文件或专门包含文件之类的操做。再次查看“复制”任务的文档以获取更完整的想法。
task copyDocs(type: Copy) { from 'src/main/doc' into 'build/target/doc' eachFile { file -> doSomething(file); } exclude '**/.DS_Store' }
我在Gradle Jar或中最重视War的任务是负责打包.jar
和.war
文件以进行最终分发的任务。像Copy
任务同样,他们具备定制过程的很是开放的能力,这对于须要定制最终产品的项目多是巨大的帮助。实际上,您可使用Gradle DSL来彻底控制打包过程的各个方面。
Spring Boot插件的bootJar
和bootWar
任务继承自Jar
和War
任务,所以它们包括全部配置选项,包括复制,过滤和修改文件的能力以及自定义清单的能力。
提升篇到此结束,你们要是有兴趣欢迎去Gradle官网查看API文档,很是有帮助。