我们正在为我们非常庞大和复杂的企业应用程序尝试 Gradle。我们正在使用多项目构建结构,并且对 Gradle 的并行执行功能感到非常兴奋。
我们的代码库是在领域层中构造的,如下所示:
UI 模块 (~20) -> 共享 ui -> 域 -> dao -> 框架
依赖关系是单向的,构建发生自下而上。
不幸的是,我们没有看到我们的构建时间有很大的提升。它与我们之前使用 ant 得到的几乎相同。
查看并行模式下任务的执行顺序,几乎没有什么不对劲的地方。我们的期望是 Gradle 在构建核心层时最初会按顺序运行任务。因此,在它组装了框架、dao、域和共享 ui 之后,它应该并行踢其他所有东西。
但是我们看到的执行顺序有点像这样:
framework.assemble -> dao.assemble -> domain.assemble -> shared.ui.assemble -> 其他 UI modules.assmble(并行)-> war -> 其他 UI.check + shared.ui.check + dao.check (并行)-> domain.check -> framework.check
当它按顺序而不是并行运行域和框架检查时,瓶颈处于最后。这两个模块对我们来说是最大的模块,大约有 12k 单元测试,它们大约需要 4 分钟才能运行。
我们花了很多时间使用 gradle 任务查看依赖关系——这些模块的所有和测试任务都是完全独立的,没有什么可以阻止它们的执行。
我们想知道这是否是一个已知问题,或者是否有办法在 Gradle 中启用一些额外的调试,以便更深入地了解 Gradle 如何确定并行模式下的执行顺序。任何帮助表示赞赏。