Gradle 任务行总是得到执行

Gradle task lines always getting executed

我有以下 Gradle 任务:

task deploy(type: Exec) {
    doFirst {
        println 'Performing deployment'
    }

    final Map properties = project.getProperties()

    if (!properties['tag']) {
        throw new StopExecutionException("Need to pass a tag parameter")
    }

    commandLine "command", tag
}

如果我 运行 另一个任务我得到一个错误,因为属性 ['tag'] 未定义,我猜是因为 Gradle 正在执行任务中除 commandLine 之外的所有内容。是否有更好的方法来执行此操作或阻止 Gradle 执行部分任务,即使我正在 运行 执行另一项任务?

使用 Gradle 6.6.1

我使用这个模式:

// Groovy DSL
tasks.register("exec1", Exec) {
    def tag = project.findProperty("tag") ?: ""
    commandLine "echo", tag

    doFirst {
        if (!tag) {
            throw new GradleException("Need to pass a tag parameter")
        }
    }
}

它添加 tag 属性 如果它存在。

如果它不存在,它会添加一个空字符串,但会在实际运行之前进行检查。

如果 Exec 任务接受提供者作为参数就好了,这样您就可以给它 providers.gradleProperty("tag"),但遗憾的是它不接受。