说明

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 参数配置监听的更多相关文章

  1. 涂抹Oracle笔记1-创建数据库及配置监听程序

    一.安装ORACLE数据库软件及创建实例OLTP:online transaction processing 指那些短事务,高并发,读写频繁的数据库系统.--DB_BLOCK_SIZE通常设置较小.O ...

  2. ASP.NET Core中配置监听URLs的五种方式

    原文: 5 ways to set the URLs for an ASP.NET Core app 作者: Andrew Lock 译者: Lamond Lu 默认情况下,ASP. NET Core ...

  3. oracle 11g 服务启动时提示1053错误,服务启动不了,重新配置监听解决问题

    早上发现oracle服务启动不了了,找了很多资料,没找到有用的.通过重新配置监听解决问题.

  4. 新建Oracle数据库时,提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序

    新建一个oracle数据库时,当提示使用database control配置数据库时,要求在当前oracle主目录中配置监听程序等字样的时候,问题是那个监听的服务没有启动,解决方法如下: 打开cmd命 ...

  5. 12C cdb/pdb 配置监听

    . PDB is not an instance, so using SID in the connection string will not work. When the database is ...

  6. spring中配置监听队列的MQ

    一.spring中配置监听队列的MQ相关信息注:${}是读取propertites文件的常量,这里忽略.绿色部分配置在接收和发送端都要配置.  <bean id="axx" ...

  7. Oracle 配置监听和本地网络服务

    一.配置监听 在oracle的配置和移植工具中打开Net Configuration Assistant,然后点击下一步. 点击下一步,然后输入监听的名称点击下一步 点击下一步后如图 点击下一步如图 ...

  8. oracle12安装软件后安装数据库,然后需要自己配置监听

    oracle12安装软件后安装数据库,然后需要自己配置监听 没想到你是这样的oracle12: 不能同时安装软件和数据库,分别安装之后,\NETWORD\ADMIN\下面竟然没有listener.or ...

  9. Sprinboot优雅配置监听,并记录所有启动事件

    在阅读Springboot启动源码的时候,发现Springboot自动启动listeners是通过uopeizhi文件配置的,本文就是采用Springboot方式自动装入listeners. 项目依赖 ...

随机推荐

  1. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  2. 架构视角 - DDD、TDD、MDD领域驱动、测试驱动还是模型驱动?

    提出问题 「领域驱动设计」之于微服务,好比麦当劳之于汉堡(个人更喜欢肯德基,汉堡要大些,麦当劳的汉堡,想吃顿饱饭,请先给我上6个

  3. SSM框架之Spring(4)AOP

    Spring(4)AOP 1.AOP概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  4. easyui-datagrid 使用笔记

    1.清空所有行和所有列 $('#dgJGQuery').datagrid({ columns: [], url: '', data: [] }); 2.采用 datagrid-groupview 分组 ...

  5. Servlet 使用介绍(1)

    说明 本篇介绍java web中比较重要的一个技术:servlet.servlet是一种对用户请求动态响应的一个技术,是java web的核心一环.对于一般服务性质的纯后台服务应用而言,或许整个应用是 ...

  6. QT无窗口状态下对键盘事件的监听

    Question:最近在搞linux下的一个客户端项目,需要接收键盘事件,但是又不能有界面,这种情况怎么处理呢? int main(int argc, char *argv[]) { QApplica ...

  7. git 配置本地用户名称 和 邮件名称

    很多次配置git用户名和邮箱了,总是会忘记,然后在网络上搜索,今天进行记录下来,防止遗忘: # 查看用户名和邮箱地址git config user.name git config user.email ...

  8. 7.SourceTree 的使用

    SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端管理工具,同时也是Mn版本控制系统工具.支持创建.克隆.提交.push.pull 和合并等操作. 下载路 ...

  9. day89_11_11Flask启动,配置,路由,fbv和cbv

    一.flask的形成. flask是一个基于python并且以来jinja2模板和werkzeug wsgi服务器的一个微型框架. 安装了flask模块就代表安装了wekzeug,所以先安装flask ...

  10. Java 的synchronized关键字使用

    synchronized 关键字是实现锁的一种方式,是在jvm层面实现的非公平锁,以下是使用synchronized的四种方式 synchronized 特性: 1.非公平锁 2.可重入性 1.作用在 ...