我正在创建一个相当自定义的任务,该任务处理多个输入文件并输出不同数量的输出文件。
我想对照现有的输出文件检查输入文件的日期,还可能查看输入文件的内容,以确定它是最新的还是需要调用才能成为最新的。我需要在doFirst中设置哪些属性,对主操作进行编码,或者在任务中设置任何属性(何时何地(,为其依赖关系检查器和任务执行器设置正确的状态,以便适当地强制依赖关系生成或不生成。
还有标准lib实用程序上的任何文档,比如文件日期检查等,获取文件列表等,这些都很容易,就像在ruby rake中一样。
如何指定任务的输入和输出?尤其是在解析源并扫描输出目录以查找存在的内容之前,输出是未知的。
在一个有依赖于它的任务的大型项目中这样做的示例将非常好:(
我需要在doFirst中设置哪些属性,对主操作进行编码,或者在任务中设置任何属性(何时何地(,以便为其依赖性检查器和任务执行器设置正确的状态,以便适当地强制依赖项构建或不构建。
理想情况下,这应该作为自定义任务类型来完成。这些逻辑都不应该出现在任何Gradle文件中。要么将逻辑放在一个专用的插件项目中,该项目发布在某个地方,然后您可以在项目中引用该项目,要么将逻辑放到buildSrc
中。
您试图开发的是所谓的增量任务:https://docs.gradle.org/current/userguide/custom_tasks.html#incremental_tasks
这些在Gradle中大量使用,这使得Gradle的增量构建成为可能:https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks
如何指定任务的输入和输出?尤其是在解析源并扫描输出目录以查找存在的内容之前,输出是未知的。
一旦你定义了你的任务和其他你需要的东西,在你的主要Gradle文件中,你会像配置任何其他插件或任务一样配置它们。
上面的两个链接应该足以帮助你开始。
作为一个小例子,我开发了一个Gradle插件,它根据一些输入生成文件,这些输入在配置之前是未知的。"自定义"任务类型只是扩展了提供的JavaExec
。自定义任务是Wsdl2java
。然后,根据用户配置,使用用户的输入文件在此处注册任务。由于我重用了内置的任务类型,我确信不会做额外的工作,可以依靠Gradle来完成繁重的工作。还有一个测试可以确保配置缓存按预期工作:ConfigurationCacheFunctionalTests。
正如我前面提到的,上面的链接应该足以让你开始。