gradle自定义task

来源:互联网 发布:python httplib2 编辑:程序博客网 时间:2024/04/30 23:26

1.在build.gradle文件中直接定义

我们知道,Gradle其实就是groovy代码,所以在build.gradle文件中,我们便可以定义Task类。

class HelloWorldTask extends DefaultTask {    @Optional    String message = 'I am davenkin'    @TaskAction    def hello(){        println "hello world $message"    }}task hello(type:HelloWorldTask)task hello1(type:HelloWorldTask){   message ="I am a programmer"}
在上例中,我们定义了一个名为HelloWorldTask的Task,它需要继承自DefaultTask,它的作用是向命令行输出一个字符串。@TaskAction表示该Task要执行的动作,即在调用该Task时,hello()方法将被执行。另外,message被标记为@Optional,表示在配置该Task时,message是可选的。在定义好HelloWorldTask后,我们创建了两个Task实例,第一个hello使用了默认的message值,而第二个hello1在创建时重新设置了message的值。

在执行hello时,命令行输出如下:

:hellohello world I am davenkinBUILD SUCCESSFULTotal time: 2.139 secs
在执行hello1时,命令行输出如下:

:hello1hello world I am a programmerBUILD SUCCESSFUL

2.在当前工程中定义Task类型

在buildSrc目录下定义Task类型,Gradle在执行时,会自动地查找该目录下所定义的Task类型,并首先编译该目录下的groovy代码以供build.gradle文件使用。在当前工程的buildSrc/src/main/groovy/davenkin目录下创建HelloWorldTask.groovy文件,将(1)中对HelloWorldTask的定义转移到该文件中:

package davenkinimport org.gradle.api.*import org.gradle.api.tasks.*class HelloWorldTask extends DefaultTask {    @Optional    String message = 'I am davenkin'    @TaskAction    def hello(){        println "hello world $message"    }}
这里,我们将HelloWorldTask定义在了davenkin包下,因此在build.gradle文件中引用该Task时,我们需要它的全名称:

task hello(type:davenkin.HelloWorldTask)task hello1(type:davenkin.HelloWorldTask){    message ="I am a programmer"}
以上的hello和hello1与(1)中的hello和hello1完成的功能相同。

3.在单独项目中定义Task类型

虽然(2)中的Task定义与build.gradle分离开了,但是它依然只能应用在当前工程中。如果我们希望所定义的Task能够用在另外的项目中,那么(2)中的方法便不可行的,此时我们可以将Task的定义放在单独的工程中,然后在所有使用Task的工程中通过声明依赖的方式引入这些Task。

创建另外一个项目,将(2)中buildSrc目录下的内容考到新建项目中,build.gradle文件如下:

apply plugin: 'groovy'apply plugin: 'maven'version = '1.0'group = 'davenkin'archivesBaseName = 'hellotask'repositories.mavenCentral()dependencies {    compile gradleApi()}uploadArchives {    repositories.mavenDeployer {        repository(url: 'file:../lib')    }}
客户端引入jar依赖,build.gradle文件可以做以下配置:

task hello(type: davenkin.HelloWorldTask)



原创粉丝点击