Gradle:在配置和执行阶段之间拆分复制任务

Mac*_*ich 2 gradle build.gradle

我在我的 build.gradle 子项目目录中有一个任务:

task copyResources {

    copy {
        from 'cli'
        into 'build/cli'
    }

    copy {
        from 'module'
        into 'build/module'
    }
}
Run Code Online (Sandbox Code Playgroud)

它的目的是将两个文件夹从项目目录复制到 Gradle 的构建文件夹。但是由于目标文件夹称为“构建”,因此其他任务的执行可能会引入一些奇怪的行为(例如,干净)。

当我尝试将此任务移至执行阶段时,它不会运行:

跳过任务 ':copyResources',因为它没有任何操作。

据我所知,这是正确的行为,因为必须在配置阶段设置复制任务的源和目标。

是否可以推迟此任务的执行,使其在“构建”任务之后运行?或者我必须使用一些普通的 Java/Groovy 代码创建不同的任务,而不使用 Gradle 的 copy(),并且只在执行阶段运行它?

Eth*_*han 5

他们定义任务的方式,复制是作为配置时间的一部分发生的。如果你想把它移到执行时间,你可以把它包装成一个doLast像下面这样的块。

task copyResources {
    doLast {
      copy {
          from 'cli'
          into 'build/cli'
      }

      copy {
          from 'module'
          into 'build/module'
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是一些可能有助于理解执行与配置时间的文档:https : //docs.gradle.org/current/userguide/build_lifecycle.html