查看构建文件,如:
task busted(type: Copy){
from "${projectDir}/foo"
into projectDir
rename 'foo','bar'
expand(baz:'qux')
}
task alsoBusted(type: Copy){
from 'foo'
into projectDir
rename 'foo','bar'
expand(baz:'qux')
}
task moreBusted(type: Copy){
from projectDir
into projectDir
include 'foo'
rename 'foo','bar'
expand(baz:'qux')
}
task notBusted(type: Copy){
from 'foo'
into "${projectDir}/quux"
rename 'foo','bar'
expand(baz:'qux')
}
task surprisinglyNotBusted(type: Copy){
from 'quux'
into "${projectDir}/quux"
include 'foo'
rename 'foo','bar'
expand(baz:'qux')
}
虽然可以将文件从同一目录复制到同一目录(令人惊讶地没有任务),但是不可能从projectDir复制到projectDir,这会引发一个很大的IOException:
org.gradle.api.UncheckedIOException:java.io.IOException:进程无法访问该文件,因为另一个进程已锁定文件的一部分
我正在尝试使用Copy来做一些简单的模板,这可能不是明智的,但是有没有理由不起作用?有没有更好的方法呢?
TIA .....
答案 0 :(得分:3)
将文件直接复制到项目目录时,这是一个错误。每当任务的输出设置为项目目录时,这似乎都是一个问题。例如,以下内容表现出相同的行为:
task notCopyButStillBusted {
outputs.dir projectDir
doLast {
println "IOException on Windows sadly"
}
}
到目前为止,我找到的唯一解决方法是定义自己的复制行为:
task copyWorks {
inputs.file "/path/to/Makefile"
outputs.dir "$projectDir/Makefile"
doLast {
copy {
from "/path/to/Makefile"
into projectDir
}
}
}
这适用于显式文件,一次复制多个文件可能会更难。
您可以投票GRADLE-3002以提高对此错误的关注。
答案 1 :(得分:1)
尝试以下
task copyFiles(){
doLast{
ant.copy( todir: "c:\temp\destinationfolder" ){
fileset( dir: "c:\temp\sourcefolder" )
}
}
}