是否无法使用Gradle Copy任务从项目目录复制到项目目录?

时间:2013-11-06 00:43:55

标签: gradle

查看构建文件,如:

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 .....

2 个答案:

答案 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" )
         }
    }

}