是否有工具可以分析Maven构建过程本身,以便我可以看到构建花费最多时间的位置?
我们在Maven 3.0.3和3.0b1方面遇到了问题.与3.0.3(9m00s)相比,我们的项目在3.0b1(3m30s)下构建得更快.使用3.0b1,构建速度提高约63%(如果我的数学运算正确).
我尝试搜索有关Maven 3的性能比较和性能问题,但无法找到任何内容.
UPDATE
我通过查看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();
Run Code Online (Sandbox Code Playgroud)
在3.0b1中,代码执行:
ArtifactResolutionResult result = repositorySystem.resolve( request );
Run Code Online (Sandbox Code Playgroud)
我也注意到它respositorySystem的类型RepositorySystem,具体实现是LegacyRepositorySystem.我假设在Maven 3处于测试版之前使用它直到创建新实现?回到3.0.3,该collectDependencies方法DefaultRepositorySystem.java属于其中的一部分org.sonatype.aether.impl.internal.这最终调用collectDependencies内部DefaultDependencyCollector.java也是其中的一部分org.sonatype.aether.impl.internal.我假设这是依赖图的构建方式.
我现在想知道这是因为我们的依赖关系是如何构建的.以前有没有人见过这种行为?
UPDATE
有一个问题在JIRA关于与修复建议沿着这个问题.我发布了详细信息作为答案.
UPDATE
问题是由于maven 3.0.3(1.11)中使用的以太版本.版本1.12的以太修复了这个问题.我检查了maven 3.0.3的源代码并编辑了POM,将以太版本从1.11更改为1.12.然后我从源代码构建了maven,用我构建的版本替换了我当前的版本.构建时间的缩短是显着的.
如果您不想从源代码构建maven,可以使用1.12版本替换maven的lib目录中的以太库.这也应该有效.
我不确定这个改变是否会进入3.0.4,因为maven开发人员说有许可证的变化从以太1.11到以太1.12,所以他们仍在讨论它.
Maven只是一个简单的Java应用程序,因此我建议您使用分析工具(如YourKit或JProfiler)启动它,并分析其运行时性能.您还可以使用JVisualVM来提取运行时性能信息.
总而言之,我相信Maven开发人员有兴趣了解这种性能回归.请在Maven Jira中打开一张票,或在Maven开发者列表上发布
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |