如何在自定义任务结束时执行'clean'任务?



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

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

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

iv'e尝试

configure(subprojects) {
task clean << {
    println "Do clean " + project.name
}
task test(dependsOn: clean)<<{
    println 'test ' + project.name
}
task cleanTest(dependsOn: cleanTest)<<{
    parent.cleanTest.execute()
}
}

我想要的就是在自定义任务结束时运行'干净的任务

这是不可能的。您不能在一次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()
        }
    }
}

如果要在测试前清洁,则只需进行测试取决于干净即可。这确保在每次测试之前,都要执行清洁。这就是Gradle做事的方式。

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

也有疑问如何在mytask之后干净。要在mytask之后运行干净的任务,您可以根据两者使用第三任务,并指定清洁和mytask之间的强制订单

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

如果问题是您是否可以在单个构建中多次运行干净的任务,那么这是不可能的,请参见吸血鬼的答案以共享代码。

最新更新