首页 > 解决方案 > 如何防止 gradle 任务覆盖由调用 groovy 类创建文件的自定义任务创建的文件

问题描述

我想在我们清理并安装到 install/conf 目录后附加属性,所以我的想法是复制现有的 install/conf 并将其放在 temp 目录中,然后调用自定义任务,它将获取这个现有的 conf 属性和将使用新属性进行更新,但不会被覆盖。

我为此使用了一个 groovy 类,并将现有属性放入 map 并使用 ./conf 文件夹中的新属性执行 putAll。

但是当我调用这个自定义任务时存在一个问题,它只能正常工作并进行所有更改,但是当我用它调用所有其他任务时,比如 clean、copyLib 和所有其他任务,它会被覆盖。

我相信这是由于新文件夹 install/conf、install/lib 和所有这些而发生的,这两个任务不同步或类似的东西,我怎样才能使这个文件夹可用于新创建的任务。当我更改自定义任务属性的目标位置时,它也适用于所有任务。我还确保我的自定义任务仅在 clean 和其他任务之后运行,但仍然没有运气

def copyExistingConf(){
// copies the conf from install to some temp before clean runs
}

def customTask(){
 CopyConf confObject= new CopyConf("$Project_dir/conf/abc.properties", "$Project_dir/install/conf/abc.properties")
confObject.main() //I created main method which does all this putall and load
}

def copyLib(type:Copy){
from "lib" into "install/lib"
}
def clean(type:Delete){
delete "install"
}

def deploy(){
dependson =['copyLib','copyConf']
task['copyLib'].mustRunAfter('clean')
task['copyConf'].mustRunAfter('copyLib')
}

我无法复制实际代码,但仅与此类似

我尝试在部署中只运行单个任务并且它有效,但是当我使用从文件夹复制到安装/文件夹的任何任务时,它会覆盖更改。

标签: gradlegroovybuildbuild.gradlegradle-plugin

解决方案


推荐阅读