Gradle 复制任务始终是最新的
Gradle Copy Task is always Up To Date
我的 gradle 任务看起来像这样
task xml_file_to_vs_build(type: Copy) {
outputs.upToDateWhen { false }
doLast {
outputs.upToDateWhen { false }
println("copying strings.xml");
from 'src/main/res/values'
into '../vso_build'
include 'strings.xml'
}
}
任务始终是最新的。如果我将块置于配置阶段,即在 doLast 之外,一切正常。但是即使我执行了我不想要的 gradlew 任务,代码也会执行。我做错了什么?
您应该按以下方式定义任务:
task xml_file_to_vs_build(type: Copy) {
println("copying strings.xml")
from 'src/main/res/values'
into '../vso_build'
include 'strings.xml'
}
复制任务只有在有内容要复制时才会执行。告诉它复制什么是配置任务的一部分,因此需要在配置阶段而不是执行阶段完成。这些是需要理解的非常重要的概念,您可以在 Gradle 用户指南或 Gradle 论坛上阅读它们。
doFirst 和 doLast 块在执行阶段执行,作为执行任务的一部分。两者都来不及告诉任务要复制什么:doFirst 在主要任务操作(在本例中是复制)之前立即执行,但(不久)在跳过和最新检查(基于任务的配置)。 doLast 在主要任务操作之后执行,因此显然为时已晚。
我的 gradle 任务看起来像这样
task xml_file_to_vs_build(type: Copy) {
outputs.upToDateWhen { false }
doLast {
outputs.upToDateWhen { false }
println("copying strings.xml");
from 'src/main/res/values'
into '../vso_build'
include 'strings.xml'
}
}
任务始终是最新的。如果我将块置于配置阶段,即在 doLast 之外,一切正常。但是即使我执行了我不想要的 gradlew 任务,代码也会执行。我做错了什么?
您应该按以下方式定义任务:
task xml_file_to_vs_build(type: Copy) {
println("copying strings.xml")
from 'src/main/res/values'
into '../vso_build'
include 'strings.xml'
}
复制任务只有在有内容要复制时才会执行。告诉它复制什么是配置任务的一部分,因此需要在配置阶段而不是执行阶段完成。这些是需要理解的非常重要的概念,您可以在 Gradle 用户指南或 Gradle 论坛上阅读它们。
doFirst 和 doLast 块在执行阶段执行,作为执行任务的一部分。两者都来不及告诉任务要复制什么:doFirst 在主要任务操作(在本例中是复制)之前立即执行,但(不久)在跳过和最新检查(基于任务的配置)。 doLast 在主要任务操作之后执行,因此显然为时已晚。