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

标签 gradle build.gradle

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

task copyResources {

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

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

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

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

Skipping task ':copyResources' as it has no actions.

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

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

最佳答案

按照您定义任务的方式,复制是作为配置时间的一部分发生的。如果你想将它移动到执行时间,你可以将它包装到一个 doLast block 中,如下所示。

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

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

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

关于Gradle:在配置和执行阶段之间拆分复制任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38895361/

相关文章:

eclipse - 使用Wuff(Gradle插件)构建Eclipse插件

android - 两个依赖使用相同的库但版本不同

android - 找不到属性应用程序 :useSimpleSummaryProvider

java - 构建android项目时出现intellij想法错误-groovy.lang.MissingMethodException : No signature of method:

java - 如何修改基于 Gradle 构建的 Jersey 项目的依赖关系?

java - Gradle for Java 项目中的 ClassNotFound 错误

testing - 无法实例化规范 'KernelTest'

android - 模块根文件夹中缺少文件 google-services.json(但它在好地方!)

groovy - 使用 Gradle,如何确保命令存在

java - 在Gradle的Java测试中使用Scala类