Gradle学习之书籍《Build and Test with Gradle》之chapter2:Gradle task任务
来源:互联网 发布:象过河软件怎么样 编辑:程序博客网 时间:2024/04/30 04:15
本文原创作者:http://blog.csdn.net/minimicall转载需要注明次来源
本文为读书笔记,记录性文章,所以,不会大段大段的阐述。只会一条条的总结。
1. 定义一个任务。
gradle会运行本目录下的脚本build.gradle文件。
内容:
task hello执行:
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_1$ gradle hello:hello UP-TO-DATEBUILD SUCCESSFULTotal time: 3.707 secsmicall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_1$ gradle tasks:tasks------------------------------------------------------------All tasks runnable from root project------------------------------------------------------------Build Setup tasks-----------------init - Initializes a new Gradle build. [incubating]wrapper - Generates Gradle wrapper files. [incubating]Help tasks----------dependencies - Displays all dependencies declared in root project 'e2_1'.dependencyInsight - Displays the insight into a specific dependency in root project 'e2_1'.help - Displays a help messageprojects - Displays the sub-projects of root project 'e2_1'.properties - Displays the properties of root project 'e2_1'.tasks - Displays the tasks runnable from root project 'e2_1'.Other tasks-----------helloTo see all tasks and more detail, run with --all.BUILD SUCCESSFULTotal time: 2.388 secs
什么东西都没做,只是定义了一个任务。空的。
接下来,定义任务里面实质性的东西。
首先,告诉大家的是,一个gradle build一般经过三个阶段。初始化(initialization),配置(conifguration),执行(execution)。
一个任务包含动作(Task Action)和配置(Task Configuration)。
2. 动作(Task Action)
task hello << {println 'hello, world'}我们用 << 追加符来定义一个task的动作。当然后续你会看到有其他方法。但这个是最方便的。
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_3$ gradle hello:hellohello,worldBUILD SUCCESSFULTotal time: 4.068 secs你看,输出了一个hello world
不过,这个追加是可以继续“追加”的。看例子:
task hellohello << {print 'hello, '}hello << {println 'world'}我们分了两次来定义hello任务的动作。
结果是和第一次是一样的。
3.任务配置(Task Configuration)
看例子吧。
task initializeDatabaseinitializeDatabase << { println 'connect to database' }initializeDatabase << { println 'update database schema' }initializeDatabase { println 'configuring database connection' }
注意最后一行,没有追加符号的。我们来看一下输出。
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_6$ gradle initializeDatabaseconfiguring database connection:initializeDatabasecomnnet to databaseupdate database schemaBUILD SUCCESSFULTotal time: 4.056 secs注意输出,“configuration database connection是在:initializeData这一行之前。
所以,一个任务执行前,实会先被配置的。
配置和动作一样可以“追加”,看例子吧。
task initializeDatabaseinitializeDatabase << { println 'connect to database' }initializeDatabase << { println 'update database schema' }initializeDatabase { print 'start configuring ' }initializeDatabase { println 'database connection' }
执行,输出:
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_8$ gradle initializeDatabasestart configuringconfiguring database connection:initializeDatabasecomnnet to databaseupdate database schemaBUILD SUCCESSFULTotal time: 3.781 secs配置,主要是定义一些你在执行动作的时候要用到的变量,数据结构。需要说明的是,在构建工程的过程中,不管你这个任务是否会被执行,但你的配置是每次都会被执行的。所以,需要注意这点。
还是给大家看一下代码吧:
task initializeDatabaseinitializeDatabase << { println 'comnnet to database'}initializeDatabase << { println 'update database schema'}initializeDatabase { println 'start configuring'}initializeDatabase { println 'configuring database connection'}task testConfiguretestConfigure << { println 'test configure action'}testConfigure { println 'I am the Cofiguration of task testConfigure'}
输出:
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_8$ gradle initializeDatabasestart configuringconfiguring database connectionI am the Cofiguration of task testConfigure:initializeDatabasecomnnet to databaseupdate database schemaBUILD SUCCESSFULTotal time: 3.751 secs
4,任务也是个对象
这部分主要是包含四个内容:
1)任务之间的依赖。depensOn
2)doFirst方法。
3)doLast方法。
4)onlyIf方法。
我直接上两个例子。给大家一个直观感受:
task setupDatabaseTests << {// This is the task's existing actionprintln 'load test data'}setupDatabaseTests.doFirst {println 'create schema'}setupDatabaseTests.doFirst {println 'create xxxx'}setupDatabaseTests.doLast {println 'drop test data'}task createSchema << { println 'create database schema'}task loadTestData(dependsOn: createSchema) << { println 'load test data'}loadTestData.onlyIf{System.properties['load.data'] == 'true'}
大家运行各自任务来测试即可。我这里贴一个onlyIf和依赖的输出
micall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_9$ gradle loadTestData:createSchemacreate database schema:loadTestData SKIPPEDBUILD SUCCESSFULTotal time: 3.701 secsmicall@micall-ThinkPad:~/workspace/gradler_learning/gradle/e2_9$ gradle -Dload.data=true loadTestData:createSchemacreate database schema:loadTestDataload test dataBUILD SUCCESSFUL
DefaultTask的一些属性
didwork
是否成功执行
enable,是否可以被执行,如果被设为false则它本身不执行,它依赖的任务还是会被执行的,除非那个任务也被禁止了。
path,路径。
logger,日志。
task logLevel << {def levels = ['DEBUG','INFO','LIFECYCLE','QUIET','WARN','ERROR']levels.each { level ->logging.level = leveldef logMessage = "SETTING LogLevel=${level}"logger.error logMessagelogger.error '-' * logMessage.size()logger.debug 'DEBUG ENABLED'logger.info 'INFO ENABLED'logger.lifecycle 'LIFECYCLE ENABLED'logger.warn 'WARN ENABLED'logger.quiet 'QUIET ENABLED'logger.error 'ERROR ENABLED'println 'THIS IS println OUTPUT'logger.error ' '}}输出:
$ gradle -b logging.gradle logLevel16:02:34.883 [ERROR] [org.gradle.api.Task] SETTING LogLevel=DEBUG16:02:34.902 [ERROR] [org.gradle.api.Task] ----------------------16:02:34.903 [DEBUG] [org.gradle.api.Task] DEBUG ENABLED16:02:34.903 [INFO] [org.gradle.api.Task] INFO ENABLED16:02:34.904 [LIFECYCLE] [org.gradle.api.Task] LIFECYCLE ENABLED16:02:34.904 [WARN] [org.gradle.api.Task] WARN ENABLED16:02:34.905 [QUIET] [org.gradle.api.Task] QUIET ENABLED16:02:34.905 [ERROR] [org.gradle.api.Task] ERROR ENABLED16:02:34.906 [ERROR] [org.gradle.api.Task]SETTING LogLevel=INFO---------------------
0 0
- Gradle学习之书籍《Build and Test with Gradle》之chapter2:Gradle task任务
- Gradle学习之第二步创建Task
- Gradle学习之创建Task的方法
- gradle学习笔记之hook task
- Gradle Plugin Samples 之 Gradle Unit Test
- configuring gradle test task
- Gradle 学习之路
- Gradle学习之Eclipse构建Gradle工程
- 从零开始学习Gradle之二---如何使用Task
- 从零开始学习Gradle之二---如何使用Task
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle学习系列之九——自定义Task类型
- Gradle 使用指南 -- Gradle Task
- Gradle Plugin Samples 之 Gradle Build Configs(五)
- PHP学习笔记之预先获取文章中图片尺寸(app专用)
- Android 网络交互(三)之TCP实现和原理分析
- IOS开发之NSPredicate 查询、搜索
- android完全退出应用程序
- STL源码—红黑树2
- Gradle学习之书籍《Build and Test with Gradle》之chapter2:Gradle task任务
- 多线程的那点儿事(之windows锁)
- UITextField 的用法详解
- linux 中的setitimer()函数
- Ecplise必须知道的配置
- 删除一个xcode引起IDEA中android工程的svn失效问题
- XML基础知识
- HTTPS数据包抓取的可行性分析
- java junit 使用注解引入