Directory gradle-复制目录-问题

Directory gradle-复制目录-问题,directory,gradle,Directory,Gradle,我在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 'buil

我在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中)不起作用。它只是将文件复制到构建目录中。我的构建/模型仍然为空。谁能告诉我哪里做错了?在执行copyTask之前,我还有一个单独的任务来创建build/models目录。

在gradle中,复制任务只能有一个带有多个from的“into”目标

第二个“into”覆盖第一个“into”值,这就是为什么它只复制到“build/”而不是“build/models”中


您可能希望有一个单独的复制任务,或者改用ant.copy。

生成脚本包含以下错误:

  • 目录是在配置
    mydir
    时创建的,而不是在执行时创建的。(这意味着在每次生成调用时都会创建目录,而不管执行的任务是什么。)
  • 新建文件('some/path')
    创建一个相对于Gradle进程当前工作目录的路径,而不是相对于项目目录的路径。始终使用
    project.file()
  • 复制
    任务只能将一个顶级
    复制到
  • 以下是更正的版本:

    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
    任务的目标目录(应该使用子目录)很奇怪。

    我使用Copy方法而不是type:Copy,它起作用了。不知道背后的原因是什么。文件上说,副本类型会进行最新检查。而copy()方法不进行检查。关于重写,您是正确的。但是,
    复制
    任务可以有任意数量的独立复制操作。它们所需要的共同点是一个“基本”目标目录(顶级
    )。