的文档注意到,摇篮使用有向无环图(DAG)建立依赖关系图。从我的理解,有评估和分离执行周期是一个构建工具的一大特色。例如该摇篮DOC 指出,这使得一些功能,否则是不可能的。

我感兴趣的是真实世界的例子展示了此功能部件的电源。什么是一些用例为它的依赖图是非常重要的?我是从外地个人故事特别感兴趣,无论是摇篮或类似装备的工具。

我正在从一开始就这个“社区维基”,因为这将是难以估量一个“正确”的答案。

有帮助吗?

解决方案

用于最终寻找到摇篮这挑衅性的问题提供动力。我还没有使用过,所以我只能提供分析指出,一边浏览文档,而不是个人的故事。

我的第一个问题是为什么摇篮任务依赖图被保证是无环的。我没有找到这个问题的答案,但相反的情况下,很容易构建,所以我推测,循环检测是当图表构建了一个运行验证,在此之前的第一个任务,如果执行构建失败有违法周期性的依赖关系。而不需要先建立这个图中,故障情况可能不会被发现,直到构建基本完成。此外,检测程序将不得不在每次执行任务后运行,这将是非常低效的(只要图表是增量和可用的全球建成,深度优先搜索将只需要找到一个起点,以后的周期评估将需要最少的工作,但总的工作仍然会做比对当初整套关系)单减持更大。我会记下及早发现作为一个重大的好处。

一个任务依赖性可以是懒(参见:4.3任务依赖关系,并在13.14相关的示例)。懒惰任务相关性可能直到整个图表内置无法正确评估。这同样适用于传递(非工作)解决依赖,这可能会导致无数问题,需要反复重新编译为额外的依赖的发现和解决(也需要反复要求的储存库)真。任务规则功能(13.8)是不可能的要么。这些问题,并有可能许多人一样,可以通过考虑摇篮使用动态语言来概括,并能动态地添加和修改任务,所以之前的第一通评价,因为执行路径是建立结果可能是不确定性的,在运行时修改,因此,不同的评价序列可以产生任意不同的结果,如果有依赖关系或行为的指令是未知的,直到后来,因为他们还没有被创建。 (这可能是堪与一些具体的例子调查。如果这是真的,那么即使两个路径并不总是足够如果A - > B,B - > C,其中C改变的,以便它不再是行为依赖于B,那么你有一个问题,我希望有关于限制元编程与非本地范围的一些最佳做法,不允许它在任意的任务。一个有趣的例子是一个时间旅行悖论的模拟,其中一个孙子杀死祖父或结婚祖母,生动地示出了一些实际伦理原则!)

它可以实现更好的状态和进度上当前正在执行的创建报表。一个TaskExecutionListener提供前/挂钩到每个任务的处理之后,但不知道剩余任务的数量,没有太多它可以说比约其他身份“6个任务完成。关于执行任务FOO”。相反,你可以初始化与gradle.taskGraph.whenReady任务的数量TaskExecutionListener,然后将其连接到TaskExecutionGraph。现在,它可以提供信息,使报告的细节,如“72 6的任务完成现在正在执行的任务富剩余所需时间:。小时38米。”如果正在使用摇篮编排的大型多项目构建和时间估计是至关重要的,这将是一个控制台上显示为持续集成服务器比较有用。

正如杰里布拉德指出,生命周期的评估部分是确定执行计划,它提供了关于环境的信息关键的,因为环境的一部分被由DAG部分中的配置的执行上下文(实施例4.15确定)。此外,我可以看到执行优化这个是有用的。 Independ耳鼻喉科子路径可以安全地交给不同的线程。步行执行算法可以是更少的存储器密集,如果他们不幼稚(我的直觉说总是走最子路径的路径会导致更大的堆比总是倾向于用最少的子路径的路径)。

这是有趣的使用,这可能是其中一个系统的很多部件都开始掐灭支持演示和增量开发的情况。然后在开发过程中,而不是更新的生成配置,因为每个组件成为实施,构建本身可能确定一个子项目是准备纳入,但(也许它试图抢代码,编译并运行一个预先确定的测试套件) 。如果是,评估阶段将揭示这一点,相应的任务将包括在内,否则,它选择了存根的任务。也许有不可用的Oracle数据库的依赖关系着呢,你在此期间使用的嵌入式数据库。您可以让构建查询的可用性,透明地切换时是可以的,告诉你,它交换数据库,而不是你告诉它。可能有大量的沿着这些线路创造性的用途。

摇篮看起来真棒。感谢挑起一些研究!

scroll top