我们有一个可选的gradle任务docker
,它取决于任务war
,如果执行该任务,需要使用其中的额外文件生成的war文件。这个额外的文件可以被添加到processResources
任务中的资源(或直接在war
任务中)。但是,如果任务docker
未被请求且不会运行,则相应的代码块不能运行。gradle.processResources中的代码块是否有其他任务被请求
我们需要一个正确的条件在以下块检查,如果任务docker
在流水线:
processResources {
if (/* CONDITION HERE: task docker is requested */) {
from ("${projectDir}/docker") {
include "app.properties"
}
}
}
task docker(type: Dockerfile) {
dependsOn build
...
澄清:processResources
是war
任务的标准的依赖,后者是标准依赖于build
任务。 processResources
总是在build
上执行,有或没有docker
任务来收集组装战争的资源,并且在这种情况下可能不会完全禁用。可以将代码移动到依赖于docker
的单独任务,并在输出目录processResources
上运行,但在运行war
之前,然而,这样的构造对于这样一个简单的事情将导致更少的清晰度。
感谢您的回答。您能否请您根据我的问题添加到您的提示中,并在必要时进行更新。如果我理解正确,保留任务并且仅使代码块有条件的最优雅的解决方案是使用通过TaskExecutionGraph初始化的标志。会尝试让知道。 –
@Oleg这个标志有一个问题,它只在执行阶段可用,但是你的任务很像复制任务,你提供的逻辑是在配置阶段执行的。我想,根据你在最新的问题中的说明,最好的解决方案是将它分成2个任务,并在图形准备就绪后禁用其中的一个,就像在最后一个例子中完成的那样。只要不要忘记在任务上方留下评论,即可能在其他地方禁用该评论。当然,如果你能够将你的逻辑转移到执行阶段,那么flag就是解决方案 – Stanislav