我正在尝试通过Gradle任务将一个文件复制到多个目标。我在其他网站上发现了以下内容,但在运行此任务时出现了错误。
def filesToCopy = copySpec{
from 'somefile.jar'
rename {String fileName -> 'anotherfile.jar'}
}
task copyFile(type:Copy) {
with filesToCopy {
into 'dest1/'
}
with filesToCopy {
into 'dest2/'
}
}
错误
没有方法签名:org.gradle.api.internal.file.copy.CopySpecImpl.call()适用于参数类型
有没有办法在一个Gradle任务中复制到多个目的地?
答案 0 :(得分:35)
如果你真的希望他们完成一项任务,你可以这样做:
def filesToCopy = copySpec {
from 'someFile.jar'
rename { 'anotherfile.jar' }
}
task copyFiles << {
['dest1', 'dest2'].each { dest ->
copy {
with filesToCopy
into dest
}
}
}
答案 1 :(得分:31)
另一种方式
task myCustomTask << {
copy {
from 'sourcePath/folderA'
into 'targetPath/folderA'
}
copy {
from 'sourcePath/folderB'
into 'targetPath/folderB'
}
copy {
from 'sourcePath/fileA.java','sourcePath/fileB.java'
into 'targetPath/folderC'
}
}
答案 2 :(得分:10)
没有#39;没有办法做那个atm。我会为每个目标目录创建单独的gradle任务
def filesToCopy = copySpec{
from 'somefile.jar'
rename {String fileName -> 'anotherfile.jar'}
}
task copyFileDest1(type:Copy) {
with filesToCopy
into 'dest1/'
}
task filesToCopyDest2(type:Copy) {
with filesToCopy
into 'dest2/'
}
答案 3 :(得分:9)
如果您的目标路径共享一个公共路径前缀(dest_base
),那么您可以使用以下内容:
def filesToCopy = copySpec {
from 'somefile.jar'
rename { String fileName -> 'anotherfile.jar' }
}
task copyFile(type: Copy) {
into 'dest_base'
into('dest1') {
with filesToCopy
}
into('dest2') {
with filesToCopy
}
}
与使用copy
方法的其他答案相比,此方法还保留了Gradle的UP-TO-DATE检查。
上面的代码段会产生如下输出:
dest_base/
├── dest1
│ └── anotherfile.jar
└── dest2
└── anotherfile.jar
答案 4 :(得分:8)
以下是Gradle 4.1没有copySpec的一般代码段。正如所指出的那样,诀窍是使用一个base并在闭包内部使用relative(例如从闭包中)。
task multiIntoCopy(type: Copy){
into(projectDir) // copy into relative to this
from("foo"){
into("copied/foo") // will be projectDir/copied/foo
// just standard copy stuff
rename("a.txt", "x.txt")
}
from("bar"){
into("copied/aswell/bar") // projectDir/copied/copied/aswell/bar
}
from("baz") // baz folder content will get copied into projectDir
//from("/bar"){ // this will mess things up, be very careful with the paths
// into("copied/aswell/bar")
//}
}