如何使gradle复制任务仅在执行时运行

时间:2016-08-09 21:19:27

标签: gradle android-gradle

我有一个用于复制的gradle任务,如下所示:

task hello << {
    println "hello"
}

task myCopy(type: Copy) {
    println "copy"
    from(file('srcDir'))
    into(buildDir)
}

但是&#34; myCopy&#34;即使我执行&#34;你好&#34;如下所示:

gradle hello

现在我明白这是预期的行为。我在这里阅读了整个Gradle Task页面:https://docs.gradle.org/current/userguide/more_about_tasks.html。但我想制作&#34; myCopy&#34;任务仅在显式执行时执行。换句话说,我想让它成为&#34; myCopy&#34;我执行&#34; hello&#34;时不执行,只在我运行命令时执行:

gradle myCopy

有办法做到这一点吗?感谢

1 个答案:

答案 0 :(得分:1)

它没有被执行,而是被配置了。仔细看看,如果您没有运行复制任务,则不会复制任何内容。配置总是会发生,并且对于您拥有的所有任务,在您的情况下,您正在打印&#34;复制&#34;在配置期间。将其移动到doLast部分以在执行阶段打印它,如:

task myCopy(type: Copy) {
   doLast { 
       println 'Copy'
   }
   from(file('srcDir'))
   into(buildDir)
}

注意,doLast闭包与使用&lt;&lt;的任务闭包相同。签名,只有在执行阶段执行任务时才会执行。