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. 项目依赖 ...
随机推荐
- django中使用pandas Django-pandas
在django中使用pandas操作django的ORM查询出来的QuerySet对象,可以使用插件django-pandas. 截止教程书写时间,django-pandas已发布到0.6.1. 依赖 ...
- 解决Xcode10 Library not loaded: /usr/lib/libstdc++.6造成的crash及报错
关键字1:dyld: Library not loaded: /usr/lib/libstdc++.6.dylib Referenced from: 关键字2:Reason: no suitabl ...
- FreeRTOS临界保护
下面的是个人笔记,所有的话都适用于我本人理解,可能存在不对的地方. 进入临界保护(支持嵌套):taskENTER_CRITICAL(); 退出临界保护(支持嵌套):taskEXIT_CRITICAL( ...
- 自定义v-color指令
在自定义指令的时候,和js行为有关的,最好就写在inserted中去,防止js代码不生效.和样似有关的操作放在bind中去Vue.direactive [d儿 Rai K T V] 没有s哈 < ...
- Java使用JDBC连接SQL Server数据库
Java使用JDBC连接SQL Server数据库 1.下载驱动 1.下载Microsoft SQL Server JDBC 驱动程序 https://docs.microsoft.com/zh-cn ...
- 201871010116-祁英红《面向对象程序设计(java)》第十周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第十二周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第十二周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...
- hebust-fengyu
三人行必有我师焉,择其善者而从之,其不善者而改之. 入则无法家拂士,出则无敌国外患者,国恒亡,然后知生于忧患而死于安乐也. 狡兔死走狗烹,飞鸟尽良弓藏,敌国尽谋臣亡 今齐地方千里,百二十城,宫妇左右莫 ...
- golang--redis连接池
通过golang对redis操作,还可以通过redis连接池,流程如下: (1)事先初始化一定数量的连接,投入到连接池: (2)当go需要操作redis时,直接从连接池取出连接即可: (3)这样可以节 ...
- find与rm实现查找并删除目录或文件
linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...