Gradle+Groovy提高篇
创建自定义任务
打开build.gradle
文件,并在末尾添加以下内容:
println "1"
task howdy {
println "2"
doLast {
println "Howdy"
}
}
println "3"
这将演示有关Gradle脚本如何工作的一些信息。使用以下命令运行它:
./gradlew howdy
您将看到(省略了一些多余的行):
> Configure project :
1
2
3
> Task :howdy
Howdy
在这里,Configure project
任务将生成并运行生成脚本。在Gradle执行Configure project
任务时,它会执行以下操作:
它打第一个println
并打印“1”
它找到要执行的howdy
任务定义块,一个闭包,并显示“2”。请注意,它不会执行doLast
关闭操作,因此尚未打印“Howdy”。
它继续执行脚本,直到第四个println
,然后打印“3”。
至此,构建脚本本身已完成对构建环境的配置。下一步是执行命令行中指定的所有任务,在本例中为howdy
任务。
这是task.doLast{}
执行块的地方,因此您会在输出中看到“Howdy”字样。
doLast
是该块的别称;它的真正含义是类似于“任务操作”,而外部块是任务配置。
task howdy {
// 始终在初始构建脚本配置期间执行
doLast {
// 仅在任务本身被调用时执行
}
// 始终在初始构建脚本配置期间执行
}
使用Graovy DSL根据Gradle文档定义任务的各种方法如下:
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文档,非常有帮助。
- 郑重声明:文章禁止第三方(腾讯云除外)转载、发表,事情原委测试窝,首页抄我七篇原创还拉黑,你们的良心不会痛吗?
技术类文章精选
- java一行代码打印心形
- Linux性能监控软件netdata中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架第二版
- 如何在Linux命令行界面愉快进行性能测试
- 图解HTTP脑图
- 将swagger文档自动变成测试代码
- 五行代码构建静态博客
- 基于java的直线型接口测试框架初探
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 成为优秀自动化测试工程师的7个步骤
- 成为自动化测试的7种技能
- 自动化测试生命周期
- 如何在DevOps引入自动化测试
- Web端自动化测试失败原因汇总
- 如何在DevOps引入自动化测试
- 测试人员如何成为变革的推动者
- 编写测试用例的技巧
Gradle+Groovy提高篇的更多相关文章
- Gradle+Groovy基础篇
在Java项目中,有两个主要的构建系统:Gradle和Maven.构建系统主要管理潜在的复杂依赖关系并正确编译项目.还可以将已编译的项目以及所有资源和源文件打包到.war或.jar文件中.对于简单的构 ...
- Maven提高篇系列之(五)——处理依赖冲突
这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...
- Spring boot 提高篇
Spring boot 提高篇 上篇文章介绍了Spring boot初级教程:构建微服务:Spring boot 入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续 ...
- ROS Learning-028 (提高篇-006 A Mobile Base-04) 控制移动平台 --- (Python编程)控制虚拟机器人的移动(不精确的制定目标位置)
ROS 提高篇 之 A Mobile Base-04 - 控制移动平台 - (Python编程)控制虚拟机器人的移动(不精确的制定目标位置) 我使用的虚拟机软件:VMware Workstation ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Java提高篇(三三)-----Map总结
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java提高篇(三一)-----Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...
- java提高篇(三十)-----Iterator
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
随机推荐
- Java nio 空轮询bug到底是什么
编者注:Java nio 空轮询bug也就是Java nio在Linux系统下的epoll空轮询问题. epoll机制是Linux下一种高效的IO复用方式,相较于select和poll机制来说.其高效 ...
- Windows系统下搭建WAMP环境
Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...
- PHP 核心特性 - 匿名函数
提出 在匿名函数出现之前,所有的函数都需要先命名才能使用 function increment($value) { return $value + 1; } array_map('increment' ...
- Linux 搭建 WIKI
转自:http://blog.csdn.net/chy800/article/details/6906090 由于公司需要一个知识共享的系统,选择wiki来实现.经过准备决定使用Linux+xampp ...
- nyoj 94-cigarettes (分清楚,那一部分的cigarettes是用过的,那一部分是没有用过的)
94-cigarettes 内存限制:64MB 时间限制:3000ms 特判: No 通过数:13 提交数:20 难度:2 题目描述: Tom has many cigarettes. We hypo ...
- Python3.7.1学习(二)使用schedule模块定时执行任务
python中有一个轻量级的定时任务调度的库:schedule.他可以完成每分钟,每小时,每天,周几,特定日期的定时任务.因此十分方便我们执行一些轻量级的定时任务. 1 安装 1.1在cmd中输入p ...
- App稳定性测试Monkey
1.$ adb shell monkey <event-count> <event-count>是随机发送事件数 例:adb shell monk ...
- 简单地迁移你的android jni代码逻辑到iOS - 编写iOS下jni.h的替代 - ocni.h
1. jni的代码逻辑中与上层平台语言交互了. 2. 使用非Xcode的ide开发工具,希望使用纯净的c/c++代码,不掺杂其它平台相关的语言语法. 3. 只想简单地替换jni代码对上层平台语言的功能 ...
- Mac上安装并配置JDK
1,下载 点击 官网 ,进入下载界面, 同意协议内容 找到对应的Mac版本, 2,安装 安装下载下来的文件,期间会要求输入一次电脑密码,然后自动安装完. 如果显示文件已经损坏,打开 终端 输入 sud ...
- 攻克数通,斩获云计算!誉天Double HCIE学员考证秘笈揭晓
不知不觉,已经过了四个月的时间了,我是六月多报名云计算的,本来是奔着邹Sir去的,但是当时邹sir已经上到HCIE的课程了,只能蹭学弟之前的录屏看.等到七月八号,又正式跟了曾曦老师上了一次完整的课程. ...