从 Checkstyle + PMD + Findbugs 迁移到 SonarQube

Migrating from Checkstyle + PMD + Findbugs to SonarQube

我想从 Checkstyle + PMD + Findbugs 迁移到 SonarQube。我读到 SonarQube 取代了所有 3 个插件(另外还有一些新规则)。但是在我的项目中,我们对这些插件进行了一些自定义配置,例如 checkstyle.xml 提供了自定义检查样式规则(其中至少有一半是自定义修改的检查样式规则(例如特殊格式的代码,过滤粗鲁的词,.. .).

...
    <module name="RegexpSingleline">
        <property name="format" value="debugger" />
        <property name="message" value="Javascript files must not contain 'debugger' statement" />
        <property name="fileExtensions" value="js" />
    </module>
...

findbugs 也一样

<FindBugsFilter>   
...
    <Match><Bug pattern="XXE_XMLREADER" /></Match> 
...
</FindBugsFilter>

和PMD

...
    <rule ref="category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop" />
    <rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
...

那么是否有可能分析当前规则、迁移到声纳立方体并添加默认声纳立方体配置中不存在的新自定义规则?

主要动机是在某些服务器上拥有一个声纳立方体实例 运行ning,所有开发人员都会在 IDEA 中安装声纳插件,该插件将连接到该声纳立方体实例(因此一些自动从 Jenkins 等构建)所以所有人都会根据当前 PMD、Checkstyle 和 Findbugs 中设置的规则使用相同的规则(在 jenkins 构建中,分别有这 3 个检查 运行,理想的解决方案是 运行 只是 sonarqube 检查)

根据我的经验,关于仅使用 SonarQube 和 SonarLint,仅使用 checkstyle、PMD 和 Findbugs 以及同时使用两者,有起有落。

SonarQube 本身的好处是,它具有易于理解的优点 UI,您可以轻松地将其集成到构建管道和 PR 工具中。

借助 SonarLint,您还可以很好地集成到 IDE 中。但在我看来,它不适合 git 钩子,或快速本地验证。我们可能会用 SonarLint 分析一些 类 但不是整个项目。因此我们使用 CI/CD.

以上就是 SonarQube SonarLint 的好处。最重要的是,您还可以在 Sonarqube 中使用 checkstyle PMD 和 Findbugs。 SonarLint 不支持这些工具,但您可以使用 Sonarqube 来显示这些工具的错误。有维护的专用插件,它们还会向您显示其他工具的错误。缺点是 SonarLint 不支持这个插件。

sonarqube 插件有时也接受来自外部分析的报告。例如。 Findbugs,你可以用findbugs分析代码,把报告提供给sonarQube就可以了。

但一般来说,可以迁移这些规则。对于 checkstyle,您可以导入 checkstyle.xml - 我不确定 findbugs 和 PMD,也许您需要手动配置它们。

无论如何,我会仔细评估什么对您的构建很重要,什么不是。通过 gradle 进行的 checkstyle 检查非常快,而声纳扫描器将 运行 扫描到低谷并且只在最后报告。如果您的构建资源有限,这有时可能很重要。

我希望这种见解至少在某种程度上有所帮助,尽管它并没有 100% 涵盖您的问题。

使用此命令将 checkstyle/pmd/cpd/findbugs 推送到 SonarQube

Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml -Dsonar.java.spotbugs.reportPaths=target/site/findbugs.xml

不幸的是,将 checkstyle 设置导入 snoarqube 并没有真正起作用,因此似乎需要手动进行所有设置:-(

https://github.com/checkstyle/sonar-checkstyle/issues/356