我在gradle中复制文件时遇到问题。以下是build.gradle
:
task mydir() {
new File("build/models").mkdir()
}
task copyTask(dependsOn:mydir, type: Copy){
from 'src/test/groovy/models'
into 'build/models'
from 'src/test/groovy/test.groovy'
into 'build/'
}
此处的问题出现在第一个副本中,即 test.groovy 被复制到 build 中。但是我将 src /../ models 中的所有文件复制到 build / models 中的第一个副本无效。它只是将文件复制到 build 目录中。我的 build / models 仍为空。有人可以告诉我,我做错了什么?在 copyTask 执行之前,我还有一个单独的任务来创建 build / models 目录。
答案 0 :(得分:11)
构建脚本包含以下错误:
mydir
配置时创建的,而不是在执行时创建的。 (这意味着无论执行哪些任务,都将在每次构建调用时创建目录。)new File('some/path')
创建一个相对于Gradle进程当前工作目录的路径,而不是相对于项目目录的路径。请始终使用project.file()
。Copy
任务只能有一个顶级into
。以下是更正后的版本:
task mydir {
doLast {
mkdir('build/models')
}
}
task copyTask(dependsOn: mydir, type: Copy) {
into 'build'
from 'src/test/groovy/test.groovy'
into('models') {
from 'src/test/groovy/models'
}
}
Copy
任务会自动创建build/models
,因此可能无需执行mydir
任务。使用build
作为Copy
任务的目标目录(应该使用子目录)很奇怪。
答案 1 :(得分:-1)
在Gradle中,复制任务只能单独进入'目标有多个来源。
第二个'进入'覆盖第一个'进入'价值以及为什么它只被复制到' build /'不是' build / models''
您可能希望拥有单独的复制任务或使用ant.copy。