自定义任务中的Gradle set属性

时间:2019-11-13 12:34:37

标签: java gradle build.gradle gradle-plugin gradlew

我有一个gradle任务,它运行一些代码检查,通常在构建过程中执行。 由于此任务需要很长时间,因此我实现了一个标志,以使其不会在常规构建期间运行,而是需要通过以下属性来启用:

tasks.withType(MyTaskType) {
    //config switch "-Pcheck=true"
    enabled = project.getProperties().getOrDefault('check', false).equals('true')
}

现在我可以在终端中通过以下方式启动它:./gradlew build -Pcheck=true

现在,我还想拥有一个任务“ buildWithCheck”,该任务会设置此属性,然后执行构建任务。

我该怎么做?我尝试过的:

task buildWithCheck {
  doFirst{
    project.getProperties().put('check','true')
  }
  dependsOn tasks['build']
}

1 个答案:

答案 0 :(得分:1)

任务enabled在DAG创建的早期就进行了评估,因此不能被其他任务覆盖。您想要的是onlyIf条件。下面的代码允许以任何一种方式运行检查:

gradle test -Pcheck=true
gradle testSlowly

build.gradle

ext {
    check = project.properties['check'] ?: "false"
}

task test {
    onlyIf { project.ext.check == "true" }
    doLast {
        println "TEST"
    }
}

task testSlowly {
    doFirst{ project.ext.check = "true" }
    finalizedBy 'test'
}

build.gradle.kts (对于踢球,我也尝试在Kotlin进行)

var check: String by extra { properties.getOrDefault("check", "false") as String }

tasks {
    val test by registering {
        onlyIf { check == "true" }
        doLast {
            println("TEST")
        }
    }
    register("testSlowly") {
        doFirst { check = "true" }
        finalizedBy(test)
    }
}