从 Checkstyle + PMD + Findbugs 迁移到 SonarQube

Joh*_*zek 5 findbugs checkstyle pmd sonarqube

我想从 Checkstyle + PMD + Findbugs 迁移到 SonarQube。我\xc2\xb4ve 读到 SonarQube 替换了所有 3 个插件(并且另外还有一些新规则)。但在我的项目中,我们对这些插件进行了一些自定义配置,例如checkstyle.xml支持自定义 checkstyle 规则(其中至少一半是自定义修改的 checkstyle 规则(例如特殊格式的代码、过滤粗鲁单词等)。

\n\n
...\n    <module name="RegexpSingleline">\n        <property name="format" value="debugger" />\n        <property name="message" value="Javascript files must not contain \'debugger\' statement" />\n        <property name="fileExtensions" value="js" />\n    </module>\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

findbugs 也有同样的事情

\n\n
<FindBugsFilter>   \n...\n    <Match><Bug pattern="XXE_XMLREADER" /></Match> \n...\n</FindBugsFilter>\n
Run Code Online (Sandbox Code Playgroud)\n\n

和PMD

\n\n
...\n    <rule ref="category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop" />\n    <rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

主要动机是让声纳立方体的一个实例在某台服务器上运行,并且所有开发人员都将在 IDEA 中安装声纳插件,该插件将连接到该声纳立方体实例(例如 Jenkins 等的一些自动构建),因此所有人都将使用基于当前 PMD、Checkstyle 和 Findbugs 中设置的规则相同的规则(在 jenkins 构建中,这 3 个检查单独运行,理想的解决方案是仅运行 sonarqube 检查)

\n

Sim*_*ner 4

根据我的经验,关于仅使用 SonarQube 和 SonarLint、仅使用 checkstyle、PMD 和 Findbugs 以及两者兼而有之。

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

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

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

sonarqube 插件有时也接受外部分析的报告。例如。Findbugs,您可以使用findbugs分析代码,并将报告提供给sonarQube。

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

不管怎样,我会仔细评估什么对你的构建重要,什么不重要。通过 gradle 进行的 checkstyle 检查非常快,而声纳扫描仪将运行低谷并仅在最后报告。如果您的构建资源有限,这有时可能至关重要。

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