在摇篮部队执行任务(Force task execution in Gradle)

2019-09-01 21:10发布

我写摇篮任务,将一定量的不需要任何输入或输出。 正因为如此,这些任务总是状态UP-TO-DATE时,我给他们打电话。 一个例子:

task backupFile(type: Copy) << {
    //Both parameters are read from the gradle.properties file
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/")

    println "[INFO] Main file backed up"
}

这将导致以下的输出:

:gradle backupFile
:backupFile UP-TO-DATE

有没有办法强制(纽约州)要执行的任务,无论什么 ? 如果有,是不是也可以切换任务执行 (例如告诉构建脚本运行的任务和要忽略的任务)?

我不能省略<<标签,因为这样做的任务始终执行,这是不是我的愿望。

许多在此先感谢您的输入。

Answer 1:

任务具有在配置阶段进行配置。 然而,要在任务操作(其配置<< { ... }它运行在执行阶段 。 因为你正在配置的任务为时已晚,摇篮决定了它没有任何关系,并打印UP-TO-DATE

下面是一个正确的解决方案。 同样,我建议使用doLast而不是<<因为它会导致更规则的语法,并不太可能添加/不经意地漏掉了。

task backupFile(type: Copy) {
    from file(adjusting_file.replaceAll("\"", "")) 
    into file(backupDestinationDirectory + "/main/")
    doLast {
        println "[INFO] Main file backed up"
    }
}    


Answer 2:

我一直在想了很多天这样做。 我要创建的processResource一步许多intermidate罐子。 下面一个必须在processResource一步创建。

processResources.dependsOn(packageOxygenApplet)  //doesn't work

task packageOxygenApplet (type: Jar) {

    println '** Generating JAR..: ' + rsuiteOxygenAppletJarName
        from(sourceSets.main.output) {
            include "org/worldbank/rsuite/oxygen/**"
        }
        baseName = rsuiteOxygenAppletJarName

        manifest {
            attributes("Build-By": oxygenUsername,
                "Specification-Title": "Oxygen World Bank Plugin")
        }
        destinationDir = file("src/main/resources/WebContent/oxygen")

}


文章来源: Force task execution in Gradle