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
原创粉丝点击