gradle任务在改变它之后如何明确地设置自己';s输出或依赖于它的任务的最新输出

gradle任务在改变它之后如何明确地设置自己';s输出或依赖于它的任务的最新输出,gradle,build.gradle,Gradle,Build.gradle,我正在创建一个相当自定义的任务,它处理大量的输入文件并输出不同数量的输出文件 我想对照现有的输出文件检查输入文件的日期,还可以查看输入文件的内容,以确定它是最新的还是需要调用才能成为最新的。我需要在doFirst中设置哪些属性,编写主操作代码,或者在任务中设置任何属性(何时何地),以便为依赖项检查器和任务执行器设置正确的状态,从而适当地强制依赖项生成或不生成 还有标准lib实用程序上的任何文档,它们可以做一些事情,比如文件日期检查等,获取文件列表等,就像ruby-rake一样简单 如何指定任务的

我正在创建一个相当自定义的任务,它处理大量的输入文件并输出不同数量的输出文件

我想对照现有的输出文件检查输入文件的日期,还可以查看输入文件的内容,以确定它是最新的还是需要调用才能成为最新的。我需要在doFirst中设置哪些属性,编写主操作代码,或者在任务中设置任何属性(何时何地),以便为依赖项检查器和任务执行器设置正确的状态,从而适当地强制依赖项生成或不生成

还有标准lib实用程序上的任何文档,它们可以做一些事情,比如文件日期检查等,获取文件列表等,就像ruby-rake一样简单

如何指定任务的输入和输出?尤其是在解析源代码并扫描输出目录以查找存在的内容之前,输出是未知的

如果有一个示例能够在一个更大的项目中实现这一点,并且该项目具有依赖于它的任务,那么该示例将非常好:)

我需要在doFirst中设置哪些属性,编写主操作代码,或者在任务中设置任何属性(何时何地),以便为依赖项检查器和任务执行器设置正确的状态,从而适当地强制依赖项生成或不生成

理想情况下,这应该作为自定义任务类型完成。所有这些逻辑都不应该出现在任何Gradle文件中。要么将逻辑放在发布到某个地方,然后在项目中引用,要么将逻辑放在中

您试图开发的是所谓的增量任务:

这些在Gradle中大量使用,这使得Gradle的增量构建成为可能:

如何指定任务的输入和输出?尤其是在解析源代码并扫描输出目录以查找存在的内容之前,输出是未知的

一旦你定义了你的任务和任何你需要的东西,在你的主Gradle文件中,你会像配置任何其他插件或任务一样配置它们

上面的两个链接应该足以帮助您开始

作为一个小例子,我开发了一个Gradle插件,它根据一些输入生成文件,这些输入在配置之前是未知的。“自定义”任务类型只是扩展了提供的任务类型。自定义任务是。然后根据用户配置,使用来自用户的输入文件注册任务。因为我重用了内置的任务类型,所以我确信不会有额外的工作要做,可以依靠Gradle来完成繁重的工作。还有一个测试可以确保按预期工作:


正如我前面提到的,上面的链接应该足以让您开始。

谢谢-我很惊讶没有一个通用的开箱即用的任务可以在没有大量代码的情况下完成这项任务,它只是一种设置状态并进行显式测试的方法,以表明我输出了什么或我是最新的。“ANWR”将在我实施后发生:)谢谢!看起来您正在创建一个通用的插件类型,可以将“脚本”设置为配置项。那么,它是否只会在现有输出的日期小于任何输入或输出为空时执行脚本?它如何处理设置新的输出值?gradle中隐含了很多东西,但我假设在执行时生成输出的任何东西都必须修改缓存系统的输出列表,因为它的依赖项我假设这与java编译器必须做的事情是一样的,因为它生成的类文件比源文件的数量多。显然,这是通过操纵“TaskOutputs”对象,并使用TaskOutputs“UpdateWhen”项测试当前输出是否需要重新设置。