代码之家  ›  专栏  ›  技术社区  ›  Zac Thompson

如何加速声纳的封装设计分析?

  •  4
  • Zac Thompson  · 技术社区  · 14 年前

    我维护一个大型(&500000 LOC)Java项目的构建过程。我刚刚在夜间建造的最后添加了一个声纳分析步骤。但要执行三个多小时…这不是一个严重的问题(它发生在一夜之间),但我想知道我是否可以加快速度(以便我可以在工作时间手动运行它,如果需要的话)。

    任何声纳,哈德逊,马文或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限制;较大的堆没有任何影响。我不知道,也许是因为纠结/重复分析的缘故。当然,我知道拆分项目是最好的选择!但这需要大量的工作;如果我能同时调整一些配置,那就太好了。

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Yannis BRES    14 年前

    我走在你的立场上:在一个200万+LOC项目上(事实上,这应该在几年前被划分为子项目),我从来没有看到包设计分析在4天的计算时间内完成…

    至于 SONAR-2164 (Add an option to skip the quadratic "Package design analysis" phase) ,我已经提交了一个补丁,允许用户在他们的Maven项目文件中设置为true,以便跳过包设计分析。 此修补程序正在等待批准,目前计划包含在2.7版中。

        2
  •  1
  •   Zac Thompson    14 年前

    从名单上的弗雷迪·马尔特:

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

    我通过排除一个相对较大的包来测试这个理论,并且确信它已经大幅下降。从理论上讲,连接的数量可以随着包的数量而四次增长,因此这种方法对于如此大的代码库可能是尽可能好的。