Gradle 自定义增量渐变编译任务的依赖项

Gradle 自定义增量渐变编译任务的依赖项,gradle,gradle-dependencies,gradle-task,Gradle,Gradle Dependencies,Gradle Task,如果希望我的编译任务是增量的,我想知道管理具有可传递依赖项的文件的自定义编译步骤的最佳方法。下面是具体的用例:我有一个目录,里面有很多模板(本例中的把手模板)。假设它们位于页面目录中。其中一些模板包括其他模板(把手部分)。假设包含的模板位于包含中。编译所有模板相当容易。例如,我可以使用handlebar命令,如handlebar来编译页面(例如For(file file file:srcDir){project.exec{commandLine'handlebar',file.name}} 调用

如果希望我的编译任务是增量的,我想知道管理具有可传递依赖项的文件的自定义编译步骤的最佳方法。下面是具体的用例:我有一个目录,里面有很多模板(本例中的把手模板)。假设它们位于
页面
目录中。其中一些模板包括其他模板(把手部分)。假设包含的模板位于
包含中。编译所有模板相当容易。例如,我可以使用handlebar命令,如
handlebar
来编译
页面
(例如
For(file file file:srcDir){project.exec{commandLine'handlebar',file.name}
}

调用handlebar命令时,会编译
输入文件
,如果需要,会调出任何模板
输入文件
包含和任何包含的模板,包括添加等。无需深入不必要的细节,我还可以在编译模板时了解模板的完整可传递依赖项。例如,如果模板A包含B和C,并且在编译A的过程中B包含E,我将了解如果B、C或E发生变化,我需要重新编译A。注意,我非常需要编译模板来了解这些信息,因为我需要解析它,并确定它包含的所有位置,如何解析这些包含,等等

我想创建一个自定义的增量任务来编译文件,但只在必要时进行。我知道如何声明此任务的输入,并且知道如何在内存中维护从includes目录中的文件到直接或通过传递依赖它的页面中的模板的映射。因此,如果s、 例如,includes/E我知道我需要重新编译A。到目前为止还不错,但我不清楚如何才能真正做到这一点


显然,仅将依赖项存储在内存中是行不通的,因为deamon可能会重新启动,甚至可能不会运行(而且我也不完全清楚在运行之间的deamon中,内存中存在哪些对象).据我所知,Gradle维护着某种缓存,这样它就能够计算出适当的增量AltaSkinput,并且知道,例如,自上次运行以来,仅包含/E更改。因此,我需要维护一个依赖项缓存,以便在必要时从磁盘读取。我可以通过将它们写入文件来手动执行此操作,但这似乎很容易出错。例如,一个不适时的Ctrl-C可能会使我的缓存与Gradle的缓存过期。我猜有一个内置系统,允许我简单地声明依赖项,并让Gradle负责将其保存在自己的缓存旁边。或者更好的是,可能有一个现有的基类处理这种类型的缓存我要做的就是声明依赖项是什么?有这样的东西吗?

我也在Gradle开发者列表上发布了这一点。Stefan Oehme给出了以下答案,我相信这是正确的:

目前还没有这样的可重用机制。我们有增量的 Java编译和进一步开放的想法已经出现 但据我所知,目前还没有具体的计划

我不完全清楚在执事的记忆中,哪些物体存在 不管怎样,在两次跑步之间

只要buildscript类路径不变,类就会继续存在 在Gradle调用之间。将重新创建实例(如项目) 不过,在每一次构建中,作为第一次尝试,您可以将东西存储在 静态变量。如果缺少该状态,则执行完整构建。即 这对任何使用守护进程和插件的人都有很大帮助