如何在doFirst / doLast闭包中执行内置的gradle任务?

时间:2012-01-23 22:31:45

标签: testing task gradle

我不知道我是不是这样做,或者我是否必须以不同的方式处理内置的gradle任务,但我有一个我定义的测试任务

task testNGTests(type: Test) {
     useTestNG()
}

我正试图在像这样的doFirst闭包中使用它

task taskA {
  doFirst {
        testNGTests.execute()
   }
}

但由于某种原因它不起作用,我也尝试了

testNGTests.executeTests() 

但这也不起作用。我是否有一种特殊的方法来处理内置的测试任务?

我使用的是gradle版本0.9.2

2 个答案:

答案 0 :(得分:14)

从其他任务执行任务不是(并且从未被)正式支持。尝试使用任务依赖性,例如taskA.dependsOn(testNGTests)

答案 1 :(得分:6)

我找到了解决方法来做到这一点。在我的场景中,我有一个任务,读取用户输入,并根据他的anwser我需要创建具有不同配置的EAR。我使用了GradleBuild类型的任务。这是代码:

task createEar() << {   
    def wichTypeOfEar = System.console().readLine("Which EAR?? (a, b)\n")    
    if(wichTypeOfEar == 'a'){
        tasks.earA.execute()
    }else{
        tasks.earB.execute()
    }    
}

task earA(type: GradleBuild) {
    doFirst{
       // Here I can do some stuffs related to ear A
    }
    tasks = ['ear']
}

task earB(type: GradleBuild) {
    doFirst{
       // Here I can do some stuffs related to ear B
    }
    tasks = ['ear']
}

ear {
   //Here is the common built in EAR task from 'ear' plugin
}

在您的情况下,您可以执行以下操作:

task testNGTests(type: Test) {
    useTestNG()    
}

task testNGTestsWrapper(type: GradleBuild){
    tasks = ['testNGTests']
}

task taskA {
    doFirst {
    testNGTestsWrapper.execute()
    }
}