新的 Maven 依赖解析算法

介绍 Maven 在 eBay 被广泛用作 Java 项目构建工具。作为 Maven 的重要组成部分, 行家解决 解析声明的依赖关系,计算依赖图,调解冲突并形成编译和部署的类路径。这就是所谓的依赖解析过程。 软件开发快速迭代的主要障碍之一是构建时间过长。作为 eBay 对速度和构建改进的承诺的一部分,我们开发了一个名为 Zeus 的 Maven 扩展,旨在收集和可视化 Kibana 报告中的 Maven 构建数据。我们惊讶地发现,在解析复杂的依赖项时,Maven 解析器存在严重的性能瓶颈。在这种情况下,Maven 依赖项解析可能要为大多数构建时间负责,从而降低开发效率。 为了加快速度,我们实施了一种新算法:BF(广度优先遍历)和 Skipper(跳过不必要的依赖解析),这有助于将 eBay 大型 Java 应用程序的纯构建时间缩短 30% 到 70%!借助此算法,无论依赖关系图有多复杂,Maven 都可以突破瓶颈,在最短的时间内以最少的计算完成依赖解析。 问题分析 注意:本文提到的测试数据基于纯构建,相当于在本地存储库已完全填充时运行的 Maven 构建(mvn clean install -DskipTests)。它不涉及下载任何 Maven 工件或测试执行。 Maven 构建由 4 个部分组成:依赖项下载、依赖项解析、插件执行和测试执行。依赖项解析时间与运行 mvn dependency:tree 的总时间差不多。 从 Zeus 收集的构建数据中,我们知道 eBay 的一些项目在依赖项解析步骤中遇到了严重的缓慢(5 […]