gradle 参数配置监听
说明
gradle提供了对project状态配置监听的接口回调,以方便我们来配置一些Project的配置属性,监听主要分为两大类,一种是通过project进行 回调,一种是通过gradle进行回调,作用域也有不同 ,project是只针对当前project实现进行的监听,gradle监听是针对于所有的project而言的。接下来就其方式和具体的实现进行介绍说明。
更多博客:http://www.enjoytoday.cn/posts/279
project回调
Project api给我们提供了两个方法对当前project配置状态进行回调afterEvaluate(project开始配置前调用)和beforeEvaluate,afterEvaluate(project配置完成后回调),需要注意的我们所说的添加的代码块回调可以添加多次,运行顺序按照添加的顺序执行(同样使用于下面所说的所有回调).
beforeEvaluate
这个方法很迷惑人,他是确实存在与Project API调用中的,API方法调用参数有两类,如下所示:
/**
* Adds an action to execute immediately before this project is evaluated.
*
* @param action the action to execute.
*/
void beforeEvaluate(Action action);
/**
*
Adds a closure to be called immediately before this project is evaluated. The project is passed to the closure
* as a parameter.
*
* @param closure The closure to call.
*/
void beforeEvaluate(Closure closure);
方法说的很清楚是配置之前调用,但你要是直接当前build.gradle中使用是肯定不会调用到的,因为Project都没配置好还有他什么事情(也是无奈),这个代码块的添加只能放在 父工程的build.gradle中,如此才可以调用的到,使用方法如下:
this.project.subprojects { sub ->
if(sub.path.endsWith("test")){
sub.afterEvaluate {
println "Evaluate before of "+sub.path
}
}
}
这是比较简单的写法,通过遍历子工程并对其设置添加afterEvaluate回调,需要注意的是afterEvaluate的Closure方式其实是有传递一个参数的,只是我把他省略了,其实也可以加上, 也可以对上面的方法做些调用,使用如下写法实现调用(subprojects和allprojects均可,看个人习惯,就不一一列出):
this.project.getSubprojects().each { sub ->
if(sub.path.endsWith("test")){
sub.afterEvaluate(new Action() {
@Override
void execute(Project project) {
println "Evaluate before of "+sub.path
}
})
}
}
//或者如下方式
this.project.subprojects{ sub ->
if(sub.path.endsWith("test")){
sub.afterEvaluate { p ->
println "subprojects getAt Evaluate before of "+p.path
}
}
}
afterEvaluate
afterEvaluate是一般比较常见的一个配置参数的回调方式,只要project配置成功均会调用,参数类型以及写法与afterEvaluate相同,示例如下所示:
this.project.afterEvaluate{
println "this.project.afterEvaluate"
//这里可以添加一些版本控制信息
}
gradle回调
可以通过project获取当前的gradle对象,gradle设置的回调监控的是所有的project实现.方式可以是通过gradle配置回调代码块,或者也可以通过添加监听接口方式获取回调监听.
通过gradle直接添加回调,代码如下:
gradle.afterProject {project,projectState ->
if(projectState.failure){
println "Evaluation afterProject of "+project+" FAILED"
} else {
println "Evaluation afterProject of "+project+" succeeded"
}
}
gradle.beforeProject { project ->
println "Evaluation before of "+project+
}
需要注意,两种方法的传入参数有差异,afterProject在配置参数失败后会传入两个参数,后者显示失败信息.
通过gradle 设置接口监听添加回调 直接通过这是对工程的监听回调接口获取回调.同上,作用的对象均是所有的project实现,代码格式如下所示:
gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
@Override
void beforeEvaluate(Project project) {
println " add project evaluation lister beforeEvaluate,project path is: "+project
}
@Override
void afterEvaluate(Project project, ProjectState state) {
println " add project evaluation lister afterProject,project path is:"+project
}
}
如上通过gradle设置监听的若需要指定特定对象操作的话,需要自己添加过滤规则.本篇结束,未完待续……
代码参考:https://github.com/fishly/gradleProject/tree/master/projectIntrod
gradle 参数配置监听的更多相关文章
- 涂抹Oracle笔记1-创建数据库及配置监听程序
一.安装ORACLE数据库软件及创建实例OLTP:online transaction processing 指那些短事务,高并发,读写频繁的数据库系统.--DB_BLOCK_SIZE通常设置较小.O ...
- ASP.NET Core中配置监听URLs的五种方式
原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...
- oracle 11g 服务启动时提示1053错误,服务启动不了,重新配置监听解决问题
早上发现oracle服务启动不了了,找了很多资料,没找到有用的.通过重新配置监听解决问题.
- 新建Oracle数据库时,提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序
新建一个oracle数据库时,当提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序等字样的时候,问题是那个监听的服务没有启动,解决方法如下: 打开cmd命 ...
- 12C cdb/pdb 配置监听
. PDB is not an instance, so using SID in the connection string will not work. When the database is ...
- spring中配置监听队列的MQ
一.spring中配置监听队列的MQ相关信息注:${}是读取propertites文件的常量,这里忽略.绿色部分配置在接收和发送端都要配置. <bean id="axx" ...
- Oracle 配置监听和本地网络服务
一.配置监听 在oracle的配置和移植工具中打开Net Configuration Assistant,然后点击下一步. 点击下一步,然后输入监听的名称点击下一步 点击下一步后如图 点击下一步如图 ...
- oracle12安装软件后安装数据库,然后需要自己配置监听
oracle12安装软件后安装数据库,然后需要自己配置监听 没想到你是这样的oracle12: 不能同时安装软件和数据库,分别安装之后,\NETWORD\ADMIN\下面竟然没有listener.or ...
- Sprinboot优雅配置监听,并记录所有启动事件
在阅读Springboot启动源码的时候,发现Springboot自动启动listeners是通过uopeizhi文件配置的,本文就是采用Springboot方式自动装入listeners. 项目依赖 ...
随机推荐
- JavaScript 赋值
JavaScript 赋值运算符 赋值运算符向 JavaScript 变量赋值. 运算符 例子 等同于 = x = y x = y += x += y x = x + y -= x -= y x = ...
- 004.MongoDB数据库基础使用
一 数据库管理 1.1 创建数据库 [root@uhost ~]# mongo --host 172.24.9.225 --port 27017 -u useradmin -p useradmin & ...
- Python:判断列表中含有字符串且组成新的列表打印输出-Dotest董浩
'''题一:判断列表中含有字符串且组成新的列表打印输出知识点:列表.列表的增删改查.for循环.if判断'''#@Author:Dotest软件测试#@QQ:1274057839names = ['D ...
- python pyquery 基本用法
1.安装方法 pip install pyquery 2.引用方法 from pyquery import PyQuery as pq 3.简介 pyquery 是类型jquery 的一个专供pyth ...
- QT debug执行exe文件 应用程序无法正常启动0xc000007b
遇到这种错,发现并不是因为缺失dll文件,因为我把需要的DLL都放到Debug文件下了,但还是有这问题: 解决方法: 右键点击-- >我的电脑--属性-->高级系统设置-->环境变量 ...
- SpringCloud单元测试【六】
SpringCloud的单元测试主要是依靠 Mock以及Mockito, 所以我们需要对Mock以及Mockito有一定的认识. 一.为什么要用MockMvc 可能我们在测试控制层的代码都是启动服务器 ...
- http2多路复用
http2多路复用 HTTP2采用二进制格式传输,取代了HTTP1.x的文本格式,二进制格式解析更高效. 多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成 ...
- ArcGIS10.2配置PostgreSQL9.2标准教程
ArcGIS 支持Oracle.DB2.PostgreSQL.SQLite关系型数据库升级为企业地理数据,Oracle太庞大,SQLite太小,DB2多在IBM上用,只有PostgreSQL最适合,它 ...
- .NET Core 中读取 Request.Headers 的姿势
Request.Headers 的类型是 IHeaderDictionary 接口,对应的实现类是 HeaderDictionary ,C# 实现源码见 HeaderDictionary.cs . H ...
- php date获取当前时间
结果: 结论: 本以为第一种方式最快,第三种方式竟超乎想象的快且稳定