如何在自定义任务结束时执行“清理”任务?

时间:2017-06-26 12:56:28

标签: gradle

我创建了自己的简单任务,所以我想在测试之前清理

task cleanTest (group: 'test setup', description: 'clean then test.'){
dependsOn 'clean'
dependsOn 'test'
tasks.findByName('test').mustRunAfter 'clean'
}

我的任务完成后,我想运行干净的任务

我试过

configure(subprojects) {
task clean << {
    println "Do clean " + project.name
}

task test(dependsOn: clean)<<{
    println 'test ' + project.name
}

task cleanTest(dependsOn: cleanTest)<<{
    parent.cleanTest.execute()
}
}

我想要的只是在我的自定义任务结束时运行'清理任务

2 个答案:

答案 0 :(得分:3)

这是不可能的。您无法在一次Gradle运行中多次运行任务。因此,如果要在任务之前和之后执行相同的操作,请定义在任务之前和之后运行的方法。使用Task.execute() 可以干净利落。从来没有做过甚至尝试过这个。它是一种纯粹的内部方法,永远不会被任何构建直接调用。它容易产生奇怪和不可预测的结果。

你想要的可能是

的内容
subprojects {
    def cleanIt = {
        println "Do clean " + project.name
    }

    clean.doLast {
        cleanIt()
    }

    task test(dependsOn: clean) {
        doLast {
            println 'test ' + project.name
        }
    }

    task cleanTest(dependsOn: cleanTest) {
        doLast {
            cleanIt()
        }
    }
}

答案 1 :(得分:1)

如果您想在测试前进行清洁,那么只需根据清洁情况进行测试。这确保在每次测试之前执行清理。这就是gradle做事的方式。

task clean() {}
task test(dependsOn: clean) {}

还有一个问题是如何在mytask之后运行clean。要在mytask之后运行clean任务,你可以根据两者使用thirdtask并指定clean和mytask之间的强制顺序

task clean() {}
task mytask() {}
task thirdtask(dependsOn: [clean, mytask]){}
clean.mustRunAfter mytask

如果问题是你是否可以在一个版本中多次运行干净任务,那么这是不可能的,并且可以从吸血鬼那里看到答案以共享代码。