在Gradle中强制执行任务

时间:2013-05-03 11:46:47

标签: gradle build.gradle

我写的一定数量的Gradle任务,不需要任何输入或输出。因此,当我调用它们时,这些任务始终会获得状态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

有没有办法强制执行(ny)任务,无论什么? 如果有,是否也可以切换任务执行(例如告诉构建脚本要运行哪些任务以及忽略哪些任务)?

我不能省略<<标签,因为这会使的任务始终执行,这不是我想要的。

非常感谢您的意见。

2 个答案:

答案 0 :(得分:10)

必须在配置阶段中配置任务。但是,您要在任务操作(<< { ... })中对其进行配置,该操作在执行阶段中运行。由于您要配置任务太晚,Gradle会确定它无所事事并打印UP-TO-DATE

以下是正确的解决方案。同样,我建议使用doLast代替<<,因为它会导致语法更加规则,并且不太可能意外添加/省略。

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

答案 1 :(得分:0)

我一直试图这么做很多天。 我必须在processResource步骤中创建许多intermidate jar。 需要在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")

}