java - Gradle 在自定义任务中设置属性

标签 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']
}

最佳答案

任务 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)
    }
}

关于java - Gradle 在自定义任务中设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837259/

相关文章:

Android Material 和 appcompat Manifest 合并失败

java - 单例 session Bean

java - 如何使用 Spring 清除所有 Hibernate 缓存(ehcache)?

android - Android 项目中带有 Gradle 插件的模块

gradle - 用 gradle 分析 Sonar

android - java.io.IOException : com. android.jack.api.v01.CompilationException: 编译失败

java - 抽象类,Number,作为我在 Java 中的输入

java - LocalDateTime 未序列化为时间戳

android - 错误 : File google-services. json 丢失。 (从 com.google.gms :google-services updated from 4. 2.0 到 4.3.0)

Android Studio 无法在任务 ':project:dexDebug' 上调用 IncrementalTask​​.taskAction()