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")
,但遗憾的是它不接受。
我有以下 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")
,但遗憾的是它不接受。