gradle - 复制目录 - 问题

时间:2014-07-03 05:20:09

标签: 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 'build/'
}

此处的问题出现在第一个副本中,即 test.groovy 被复制到 build 中。但是我将 src /../ models 中的所有文件复制到 build / models 中的第一个副本无效。它只是将文件复制到 build 目录中。我的 build / models 仍为空。有人可以告诉我,我做错了什么?在 copyTask 执行之前,我还有一个单独的任务来创建 build / models 目录。

2 个答案:

答案 0 :(得分:11)

构建脚本包含以下错误:

  1. 目录是在mydir 配置时创建的,而不是在执行时创建的。 (这意味着无论执行哪些任务,都将在每次构建调用时创建目录。)
  2. new File('some/path')创建一个相对于Gradle进程当前工作目录的路径,而不是相对于项目目录的路径。请始终使用project.file()
  3. Copy任务只能有一个顶级into
  4. 以下是更正后的版本:

    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。