4

我维护一个大型(> 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 限制;更大的堆没有效果。我不知道,由于缠结/重复分析,可能必须这样。当然,我知道拆分项目是最好的选择!但这需要相当多的工作;如果我可以同时调整一些配置,那就太好了。

有任何想法吗?

4

2 回答 2

3

我站在你的立场上:在一个超过 200 万个 loc 的项目上(实际上应该在几年前拆分成子项目),我从未见过在计算的 4 天内完成包设计分析......

SONAR-2164 开始(添加一个选项以跳过二次“包设计分析”阶段),我已经提交了一个补丁,允许用户在他们的 maven 项目文件中设置为 true,以便跳过包设计分析。此补丁正在等待批准,目前计划包含在 v2.7 中。

于 2011-02-26T17:24:40.433 回答
1

来自名单上的 Freddy Mallet:

“......问题不是来自数据库,而是来自识别所有要剪切的包依赖项的算法。......如果你设法将这个项目剪切成几个模块,那么你的问题就会消失。”

我通过排除一个相对较大的包来测试这个理论,果然它急剧下降。从理论上讲,连接的数量可以随着包的数量呈二次方增长,因此这种方法可能与如此大的代码库一样好。

于 2010-08-28T00:34:13.780 回答