Java 什么样的配置问题或问题可能会使Maven Assembly插件进展缓慢?

Java 什么样的配置问题或问题可能会使Maven Assembly插件进展缓慢?,java,maven,build,Java,Maven,Build,我们的多模块Maven项目过去需要4-6分钟来构建。在过去的几个月里,每次构建的时间增加到20分钟以上。一个症状是,有时构建似乎会暂停,直到我点击。然而,Maven构建在我们的构建服务器上仍然运行良好(6分钟,没有暂停) build命令是mvn clean package-D 我们的一些插件包括: 偏振模色散 芬德布格斯 装配 节俭编译器 JSPCMaven插件 maven替换插件 此外,我们还有一个内部Nexus存储库 更新:生成日志 本地构建: [INFO] --------------

我们的多模块Maven项目过去需要4-6分钟来构建。在过去的几个月里,每次构建的时间增加到20分钟以上。一个症状是,有时构建似乎会暂停,直到我点击。然而,Maven构建在我们的构建服务器上仍然运行良好(6分钟,没有暂停)

build命令是
mvn clean package-D

我们的一些插件包括:

  • 偏振模色散
  • 芬德布格斯
  • 装配
  • 节俭编译器
  • JSPCMaven插件
  • maven替换插件
此外,我们还有一个内部Nexus存储库

更新:生成日志

本地构建:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Project Parent ............................. SUCCESS [17.703s]
[INFO] Dependencies ............................... SUCCESS [0.109s]
[INFO] Thrift Service ............................. SUCCESS [1:51.141s]
[INFO] Thrift API Client Sample ................... SUCCESS [14.219s]
[INFO] Application ................................ SUCCESS [14:07.984s]
[INFO] Webapps Parent ............................. SUCCESS [1.250s]
[INFO] Webapp A ................................... SUCCESS [27.547s]
[INFO] Webapp B.................................... SUCCESS [20.672s]
[INFO] Webapp C ................................... SUCCESS [1:14.656s]
[INFO] Assembly ................................... SUCCESS [5:47.219s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24:23.234s
[INFO] Finished at: Fri Jan 27 10:47:38 EST 2012
[INFO] Final Memory: 25M/66M
[INFO] ------------------------------------------------------------------------
构建服务器(团队城市):

更新2

下面是一个实证分析,使用此bash脚本提供的时间戳分析,我的构建大部分时间都花在哪里:

在我看来,我可以为某些构建禁用FindBugs、PMD和单元测试。但是我需要最终的构建输出-组装。所以让我集中我的问题-什么可以使汇编插件运行缓慢

更新3

正如预期的那样,FindBugs、PMD和单元测试将构建减少了50%以上

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Project Parent .................................... SUCCESS [13.969s]
[INFO] Dependencies ...................................... SUCCESS [0.094s]
[INFO] Thrift Service .................................... SUCCESS [47.125s]
[INFO] Thrift API Client Sample .......................... SUCCESS [11.922s]
[INFO] Application ....................................... SUCCESS [3:10.922s]
[INFO] Webapps parent .................................... SUCCESS [0.468s]
[INFO] Webapp A .......................................... SUCCESS [18.157s]
[INFO] Webapp B .......................................... SUCCESS [18.437s]
[INFO] Webapp C .......................................... SUCCESS [1:00.672s]
[INFO] Assembly .......................................... SUCCESS [3:55.969s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:58.609s
[INFO] Finished at: Mon Feb 06 10:21:01 EST 2012
[INFO] Final Memory: 24M/59M
[INFO] ----------------------------------------------------------------------
我认为集会不应该花4分钟。在装配阶段,我看到了以下许多情况:

[INFO] --- maven-assembly-plugin:2.2:single (assembly-full) @ assembly ---
[INFO] Reading assembly descriptor: C:\projects\my-project\assembly/src/main/assembly/assembly-full.xml
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/var/ already added, skipping

对每个装配工件重复。这可能是缓慢的原因吗?

第一个建议是在本地执行构建并观察控制台。这将帮助您轻松识别耗时最长的插件

据我回忆,PMD和FindBugs可能需要相当长的运行时间。大型项目上的javadoc也是如此。你提到的其他插件我无法评论

当然,如果Nexus在运行速度较慢的系统上运行,可能会出现问题,可能会使用较慢的存储


啊,重读你的帖子吧:这主要发生在本地机器上。本地机器在做什么?它是否遇到内存不足的情况?暂停发生的位置也可以给出指示。

我遇到了同样的问题(为我的项目构建程序集需要40分钟)。对stacktracke的调查表明,汇编插件需要大量时间来计算依赖项(计算!而不是复制!)。注释掉dependencySet应该会大大加快速度,如果你的项目中的汇编插件因为这个原因而变慢的话

maven 3.0.x的解决方法是在程序集插件之前使用具有适当作用域的目标,然后使用文件集将这些复制的依赖项包含到程序集中。这以牺牲一些磁盘空间来解决性能问题。在我的例子中,程序集构建现在需要几秒钟,而不是40分钟


对于maven 3.2.x,到目前为止还没有已知的解决方法,因为它在更多地方使用这种缓慢的方式来计算依赖项,并且在开始做任何事情之前,构建会冻结很长时间。这使得maven 3.2.x无法用于大型项目。

maven构建打印输出结束时的输出是什么…每个模块使用的给定时间可能是开始的第一个指示…暂停并等待键盘操作的构建听起来非常奇怪…您是否只运行mvn clean package/mvn部署还是您正在运行mvn站点?更新了问题并给出了部分答案。当然,获得生成结束打印输出需要1/2个小时:-\n如果在windows中从命令行运行生成,然后意外单击终端窗口,它将暂停生成(至少在我的经验中是这样)。按enter键将使其继续。这可能是暂停的原因吗?@noahz您没有回答这个问题:您是否正在运行mvn clean package或mvn site,或者您尝试了什么?PMD和Findbugs有时会很耗时?可能与单元测试有关?要排除这种情况,请尝试使用-Dmaven.test.skip=true运行单元测试。我看到单元测试打开了挂起构建的swing对话框。另外,确保在两个版本上运行相同版本的maven和java,并且在POM中显式设置maven插件的版本。另外,确保在两个框上执行相同的maven命令。我没什么主意了,没有。这是前一家公司的商业项目,我现在无法创建具有相同问题的较小项目。
[INFO] --- maven-assembly-plugin:2.2:single (assembly-full) @ assembly ---
[INFO] Reading assembly descriptor: C:\projects\my-project\assembly/src/main/assembly/assembly-full.xml
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/config/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/ already added, skipping
[INFO] project-2.9.3-SNAPSHOT/var/ already added, skipping