gpt4 book ai didi

maven - 分析 Maven

转载 作者:行者123 更新时间:2023-12-04 02:17:44 28 4
gpt4 key购买 nike

是否有工具可以分析 Maven 构建过程本身,以便我可以看到构建花费最多时间的地方?

我们在工作中遇到了关于 Maven 3.0.3 和 3.0b1 的问题。与 3.0.3 (9m00s) 相比,我们的项目在 3.0b1 (3m30s) 下的构建速度要快得多。使用 3.0b1,构建速度大约快 63%(如果我的数学是正确的)。

我尝试搜索有关 Maven 3 的性能比较和性能问题,但找不到任何东西。

更新

我通过查看 Maven 资源做了更多的研究,这就是我发现的:

在使用 jconsole 时,我看到大部分时间(在 3.0.3 中)都花在了 DefaultProjectDependenciesResolver.java 中.因此,我将源代码下载到 3.0b1 和 3.0.3 以查看发生了什么。我注意到在 3.0.3 中有两个版本的类。一个在org.apache.maven.project ,而另一个在 org.apache.maven .似乎在 3.0.3 中也使用了前者。在逐步执行代码时,我看到大部分时间都花在了这个语句上:

node = repoSystem.collectDependencies( session, collect ).getRoot();

在 3.0b1 中,代码执行:
ArtifactResolutionResult result = repositorySystem.resolve( request );

我也注意到 respositorySystem类型为 RepositorySystem ,具体实现为 LegacyRepositorySystem .我假设这是在 Maven 3 处于测试阶段时使用的,直到创建新的实现?回到 3.0.3, collectDependencies方法位于 DefaultRepositorySystem.java这是 org.sonatype.aether.impl.internal 的一部分.这最终会调用 collectDependenciesDefaultDependencyCollector.java这也是 org.sonatype.aether.impl.internal 的一部分.我假设这就是依赖图的构建方式。

我现在想知道这是因为我们的依赖项是如何构建的。有没有人见过这种行为?

更新

有一个 issue在 JIRA 中关于此问题以及建议的修复。我已经发布了详细信息作为答案。

更新

问题是由于 maven 3.0.3 (1.11) 中使用的以太版本所致。 aether 1.12 版修复了这个问题。我查看了 maven 3.0.3 的源代码并编辑了 POM 以将 aether 的版本从 1.11 更改为 1.12。然后我从源代码构建了 maven,并用我构建的版本替换了我当前的版本。构建时间的减少是显着的。

如果您不想从源代码构建 maven,您可以将 maven 的 lib 目录中的 aether 库替换为 1.12 版本。这也应该有效。

我不确定这个更改是否会进入 3.0.4,因为 maven 开发人员说有从 aether 1.11 到 aether 1.12 的许可更改,所以他们仍在讨论它。

最佳答案

Maven 只是一个普通的 Java 应用程序,因此我建议您使用分析工具(例如 YourKit)启动它。或 JProfiler并分析其运行时性能。您也可以使用 JVisualVM提取运行时性能信息。

总而言之,我相信 Maven 开发人员会有兴趣了解这种性能回归。请在Maven Jira开票或在 Maven developers list 上发帖

关于maven - 分析 Maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681968/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com