SonarQube和IntelliJ IDEA:正确集成


SonarQube是将静态代码分析引入软件开发过程的出色工具。 它同时支持我们公司使用的Java和许多其他编程语言。


目前,此工具遵循单一的代码风格并防止各种类型的错误,已经紧密地进入了我们的生活。 在CI上构建时或在版本存储中接受拉取请求之前,会发现错误。 找到的所有错误都显示在Web界面中,您可以在其中进行研究和管理。


但是,麻烦在于方便的基于Web的界面并不意味着消除在项目代码中找到的注释的便利。 为了进行更正,您必须首先查看找到此注释的文件,然后打开该文件,然后再进行更正。 这也导致开发人员了解到滞后非常大的问题(有时在SonarQube中进行分析可能需要数十分钟),这对保持代码的纯度没有帮助。


为了使使用IntelliJ IDEA的公司开发人员的工作更轻松,我编写了说明。 后来,我意识到它对更广泛的专家圈可能有用,因此决定将其公开。


关于我公司的几句话

由于我的文章是NPO Krista公司博客中的第一篇,因此我将写一些关于我公司的词。


我们活动的领域是州和市政府的信息技术。 我们关注政府改革的有效性,政府的有效性,公共服务的质量,财务报告的透明度,人口预算数据的公开性等。


公司的历史始于雷宾斯克。 游客有时会乘伏尔加河乘船游览我们的城市。 在雷宾斯克水库附近的地图上寻找它。 我们的生产中心,分支机构和代表处的现代地理环境要广泛得多,但是非营利组织“克里斯塔”的主要中心仍位于雷宾斯克。


首先,让我们看看SonarQube通常支持哪些检查。 首先,这些是我们自己的检查,默认检查中包含这些检查。 但是,除此之外,还有一些用于集成多个第三方分析器的插件:


  • Checkstyle
  • Spotbugs (以前称为FindBugs,但在重命名分析器本身的同时也进行了重命名)
  • PMD

每个单独的检查都可以单独配置,也可以组合成配置文件,使您可以对整个企业进行一套检查。 因此,在我们的主要配置文件中,激活了1200多种不同的检查。 显然,没有人能够在他的脑海中保留这么多规则,这意味着在编写代码的每个阶段之后,随后是SonarQube的编辑注释的阶段。 这个阶段越短,对开发人员的痛苦就越小。 那么如何简化呢?


为了解决此问题,各种IDE都有插件,可让您从SonarQube服务器提取信息并直接在代码编辑器中显示。 对于IntelliJ IDEA,首先是SonarLint -SonarQube本身开发人员的官方插件。 它仅从服务器获取具有活动检查设置的配置文件,而分析本身直接在IDE中进行了突袭。 这显着提高了开发质量,使您可以立即查看所有新注释并快速进行更正。 但药膏中有蝇。 SonarLint专门与SonarQube自己的检查配合使用,而完全忽略了所有其他检查。 您将看不到FindBugs,CheckStyle或PMD的评论。 但是它可能包含很多有价值的信息。


但是请不要失望:SonarQube服务器可以导出所有分析仪的设置,这意味着可以配置标准IDEA插件,以使其产生与服务器相同的结果。


让我们按顺序处理这些设置。


配置SonarLint


这里没有技巧。 我们进入IDEA设置,然后在“ Plugins部分中找到SonarLint插件并安装它。



最初,插件使用默认检查设置。 现在,您可以转到插件窗口并配置与SonarQube服务器的连接。 由于一次查看比阅读一百次更好,因此我将给出一系列设置顺序的屏幕截图。 此后,需要注意的地方将用红色圈出。 这些是要填写的字段,或者是您想单击的按钮,或者是要带到指定视图的标志:








最主要的是不要忘记在添加新服务器后单击“ Update binding ,以便插件使用设置加载配置文件。 每当服务器上的配置文件发生更改(添加/删除检查,更改其设置)时,都必须按下此按钮。


如果已在一个IDEA项目中连接了多个模块,则在设置中,每当需要分析它的注释时,都必须切换到特定的模块。 这不是很方便,但是确实如此。


每当打开新文件或对此文件进行更改时,注释列表将在后台自动更新。 如果这种行为是不受欢迎的,则可以在插件设置中将其禁用。


下面显示了SonarLint的工作方式示例(图片可点击):



如果出了什么问题

在某些情况下,SonarLint出于某种原因拒绝工作。 在这种情况下,您可以在SonarLint本身的窗口中转到日志选项卡,查看发生了什么。 但是,不幸的是,此日志中的信息并不总是清楚和充分的。


例如,在上次发布IntelliJ IDEA(2019.2)之后,我停止处理此错误:



它提供了很多信息...而且我不知道该如何独自获取更多信息。


该情况已通过SonarQube网站上的常见问题解答得以保存。 事实证明,在IDEA的SonarLint窗口中,您可以更改错误日志记录的级别:



如果选择选定的项目,则将开始显示更详细的日志,从中您可以了解正在发生的情况:



是的 现在出现了错误,并且很清楚发生了什么。


实际上,存在令人不愉快的版本冲突。 我们的应用程序仍使用Java 8,并已在SonarQube 7.1上进行了测试。 同时,整个生产过程都与SonarQube的功能联系在一起,以分析主要开发分支和Pull Request之间的错误差异。


但是最不愉快的是,自SonarQube 7.2起,此功能已成为付费功能,这就是为什么我们仍未更新到最新版本的原因。 并且仅在SonarQube 7.3中实现了对Java 11的支持。


另一个重要的一点是,SonarLint插件在分析代码时,可以使用运行IntelliJ IDEA的JRE毫无问题地编译源代码。 当IDEA开发Java 8时,一切对我们来说都很好。 但是当它在2019.2版中切换为使用Java 11时,一切都瓦解了,因为实际上已经编译成Java 11字节码( 主要文件版本为55版 ),并且由服务器上安装的分析器版本t对其进行分析即不支持此字节码格式。 这一个已知问题


显然,您必须紧急寻求将SonarQube更新到最新版本的方法。 也许使用提供我们所需功能的第三方插件sonarqube-community-branch-plugin


从SonarQube下载分析仪设置


除SonarLint之外,每个插件都需要自己的配置文件,每个配置文件都具有自己的格式。 幸运的是,SonarQube可以下载这些文件。 它们位于分析配置文件设置窗口中。


为了到达那里,您需要转到SonarQube服务器的Web界面中的“ Quality Profile部分,然后选择用于分析项目的配置文件:



在打开的页面上,出现一个部分,提供用于导出每个分析仪设置的链接:



FindBugs和PMD的设置必须上载到具有XML扩展名的本地磁盘,但是CheckStyle的设置可以直接从站点的URL使用。


配置CheckStyle


在IDEA中,该插件称为CheckStyle-IDEA 。 就使用而言,这可能是最无问题的插件,因为它允许您直接通过URL加载设置,而无需在SonarLint之类的模块之间进行切换。


要连接配置,请转到IDEA设置,然后选择CheckStyle部分。 接下来,您需要向Configuration File表中添加一个新项:



并指出配置的来源:



同样,不要忘记在设置窗口表中将新添加的配置标记为活动状态。


就是这样,现在您可以转到CheckStyle窗口并开始分析(上方选择的按钮):



如果SonarQube服务器上的配置文件已更改,则需要通过单击同一窗口中的相应按钮(底部标记的按钮)来更新设置。


如果出了什么问题

如果出现错误“无法解析Checkstyle规则文件”,即“不允许Checker中的子项不允许SuppressionCommentFilter”,则需要在SonarQube服务器上使用的插件设置中降低Checkstyle的版本。 可以在SonarQube的Checkstyle插件说明的中找到版本符合性。


设置FindBugs


在IDEA中,该插件称为FindBugs-IDEA 。 与先前审查的插件不同,该插件不能直接从服务器获取设置,而需要本地文件。


要连接配置,请转到IDEA设置并选择FindBugs-IDEA部分。 接下来,在“ Filter选项卡上,将一个新项目添加到“ Include filter files表中:



该插件已准备就绪。 在其窗口中,可以开始分析单个文件以及整个项目或任何其他鱼鹰鱼的分析:



重要说明1:在插件设置中有一个“ Share选项卡,建议在其中连接SonarQube设置文件。 我不建议使用此设置,因为它无法正常工作,但是后果不容小treated。 事实是,仅删除此设置无效。 插件无法正常启动。 为了恢复工作,我必须删除项目目录中的.idea/findbugs-idea.xml ,然后重新配置所有内容。


重要说明2:如果SonarQube服务器上的设置已更改,则必须再次将其上载到磁盘。


重要说明3:不幸的是,在FindBugs本身的开发转移到它的SpotBugs的分支之后,此插件的开发停止了。 在JetBrains bugtracker中有关于该主题的票证 。 因此,如果您想和我们一起在自己喜欢的IDE中在家中完全支持SonarQube的所有评论,那么您可以投票购买这张票。 也许推车会移动。


PMD设定


在IDEA中,该插件称为PMDPlugin。 与FindBugs相似,此插件需要磁盘上的设置文件。 要进行配置,请转到IDEA设置并添加从SonarQube下载的文件:



该文件名起着重要作用,因为将来该插件将使用它来形成相应的菜单项以开始分析。


同样,在相邻的贡献中,您必须指定项目使用的Java版本(同时编码):



现在,您可以使用上下文菜单开始分析当前文件:


 Run PMD->Custom Rules-><  > 

重要说明1: PMD也可以通过主菜单启动,但是不建议这样做,因为在这种情况下,将不扫描一个文件,而是扫描在IDE中打开的整个项目。 这会花费大量时间,并使系统严重过载。


重要说明2:与FindBugs一样,PMD需要磁盘上的配置文件。 因此,每次SonarQube配置文件设置更改时,都必须对其进行更新。


结论


总而言之,我注意以下几点。 尽管您必须管理多达4个插件的设置来跟踪评论,但比每次等待编辑结果都出现在SonarQube服务器上还是要好,它可以使您立即提交更简洁的代码。


我希望这里提供的信息可以帮助某人更容易与一般的静态分析仪,尤其是SonarQube成为朋友。


我还要感谢帮助我撰写和支持本文相关性的同事:Dmitry Zimichev,Yuri Krupin和Artyom Ganev。

Source: https://habr.com/ru/post/zh-CN469963/


All Articles