我对Copy
任务在多个目录中的gradle行为感到困惑。
我打算将所有文件从src/common
复制到
target/dir1/ps_modules
target/dir2/ps_modules
target/dir3/ps_modules
以下是build.gradle
看起来的样子:
project.ext.dirs = ["dir1", "dir2", "dir3"]
// ensures that ps_modules directory is created before copying
def ensurePsModulesDir() {
dirs.each {
def psModules = file("target/$it/ps_modules")
if (!(psModules.exists())) {
println("Creating ps_modules directory $psModules as it doesn't exist yet")
mkdir psModules
}
}
}
task copyCommons(type: Copy) {
doFirst {
ensurePsModulesDir()
}
from("src/common")
dirs.each {
into "target/$it/ps_modules"
}
}
运行命令./gradlew copyCommons
的结果非常奇怪。
文件夹创建按预期工作,但内容/文件仅在target/dir3/ps_modules
目录中复制。其余两个目录仍为空。
任何帮助都将不胜感激。
以下是作业运行后目标目录树的屏幕抓取:
答案 0 :(得分:1)
我想你想做点什么:
task copyCommons(type: Copy) {
dirs.each {
with copySpec {
from "src/common"
into "target/$it/ps_modules"
}
}
}
我认为您可以通过此更改摆脱ensurePsModulesDir()
*编辑*
似乎复制任务强制我们设置目标目录。您可能认为设置destinationDir = '.'
是正常的,但它用于最新检查,因此任务永远不会被认为是最新的,因此始终会运行。我建议您使用project.copy(...)
而不是Copy
任务。例如
task copyCommons {
// setup inputs and outputs manually
inputs.dir "src/common"
dirs.each {
outputs.dir "target/$it/ps_modules"
}
doLast {
dirs.each { dir ->
project.copy {
from "src/common"
into "target/$dir/ps_modules"
}
}
}
}
答案 1 :(得分:0)