我维护一个大型(> 500,000 LOC)Java项目的构建过程。我刚刚在夜间构建结束时添加了一个声纳分析步骤。但是执行需要三个多小时...这不是一个严重的问题(它发生在一夜之间),但我想知道我是否可以加快速度(这样我可以在工作时间内手动运行它,如果需要的话) )。
任何Sonar,Hudson,Maven或JDK选项,我可以调整一下,这可能会改善这种情况吗?
[INFO] ------------- Analyzing Monolith
[INFO] Selected quality profile : Sonar way, language=java
[INFO] Configure maven plugins...
[INFO] Sensor SquidSensor...
[INFO] Java AST scan...
[INFO] Java AST scan done: 103189 ms
[INFO] Java bytecode scan...
... (snip)
[INFO] Java bytecode scan done: 19159 ms
[INFO] Squid extraction...
[INFO] Package design analysis...
... (over three hour wait here)
[INFO] Package design analysis done: 12000771 ms
[INFO] Squid extraction done: 12277075 ms
[INFO] Sensor SquidSensor done: 12404793 ms
1200万毫秒= 200分钟。那是很久了!相比之下,声纳步骤之前的编译和测试步骤不到10分钟。据我所知,这个过程受CPU限制;更大的堆没有效果。也许它必须是这种方式,因为纠结/重复分析,我不知道。当然,我知道拆分项目是最好的选择!但这需要相当多的工作;如果我可以在此期间调整一些配置,那就太好了。
有什么想法吗?
答案 0 :(得分:3)
我走了你的鞋子:在一个200万+ loc项目上(确实应该在几年前分成子项目),我从未看到包装设计分析在计算后的4天内完成......
从SONAR-2164 (Add an option to skip the quadratic "Package design analysis" phase)开始,我提交了一个补丁,允许用户在其maven项目文件中设置为true,以便跳过包设计分析。 此补丁正在等待批准,目前计划包含在v2.7中。
答案 1 :(得分:1)
列表上的Freddy Mallet:
“......问题不是来自数据库,而是来自算法,以识别要切割的所有包依赖关系....如果你设法在几个模块中削减这个项目,那么你的问题就会消失。 “
我通过排除一个相对较大的包来测试这个理论,并且肯定会大幅下降。从理论上讲,连接数可能会随着包的数量呈二次方式增长,因此这种方法可能与这么大的代码库一样好。