2016-03-01 120 views
2

我想知道如果希望我的编译任务是增量式的,那么可以使用具有传递依赖性的文件来管理自定义编译步骤的最佳方法。这里是特定的用例:我有一个完整的模板目录(在这里是句柄模板)。可以说这些在pages目录中。其中一些模板包含其他模板(把手部分)。可以说包含的模板在includes。编译所有模板相当简单。例如,我可以用把手命令像handlebars <input-file>编译中的每个文件pages(如for (File file : srcDir) { project.exec { commandLine 'handlebars', file.name }}。自定义增量Gradle编译任务的依赖关系

当叫车把命令编译input-file,如有必要,拉起任何模板input-file包括任何的包括那些包括添加等等。不用进入不必要的细节,我也可以在编译时学习模板的全部传递依赖关系,例如,如果模板A包含B和C,并且B在进程中包含E编译AI会知道如果B,C或E发生变化,我需要重新编译A.请注意,我非常需要编译模板来学习这些信息,因为我需要解析它并确定它包含的所有位置,如何包括解决方案等。

我想创建一个编译文件的自定义增量任务,但只有在必要时。我知道如何声明这个任务的输入,并且我知道如何在内存中保存从includes目录中的文件到直接或间接依赖于它的页面中的模板的映射。因此,如果IncrementalTask​​Inputs.outOfDate包含,例如,包含/ E我知道我需要重新编译A.到目前为止这么好,但我不清楚实际工作的最佳方式。

将依赖关系仅存储在内存中将不起作用,因为deamon可能会重新启动或者甚至可能不会运行(并且我不完全清楚哪些对象在运行之间在deamon中的内存中存活)。据我了解,Gradle维护某种缓存,以便能够计算正确的IncrementalTask​​Inputs,并知道,例如,只包含自上次运行以来更改的/ E。所以我不知何故需要维护一个依赖关系缓存,以便在必要时读取磁盘。我可以通过将它们写入文件来手动执行此操作,但似乎很容易出错。例如,一个错误的Ctrl-C可能会让我的缓存与Gradle的缓存过时。我猜想有一个内置的系统,可以让我简单地声明依赖关系,并让Gradle负责将它保留在自己的缓存中。或者更好的是,也许有一个现有的基类处理这种事情,我所要做的就是声明什么是依赖关系?有这样的事情吗?

回答

2

我也在Gradle开发者列表上发布了这个。 Stefan Oehme回答了下面的答案,我相信这是正确的:

现在还没有这种随时可以重复使用的机制。我们已经为Java增加了 编译,并且打开内容的想法在内部已经进一步提高了 。但是我还没有具体的计划。

我不是这完全清楚对象运行之间生存在内存中的守护进程 反正

只要buildscript类路径不改变,类摇篮调用之间生存 。不过,每个构建都会重新创建实例(如项目) 。所以作为第一个镜头,你可以将东西存储在 静态变量中。如果缺少这个状态,那么你做一个完整的构建。那个 对于任何使用守护进程和你的插件的人已经有很大的帮助。