SonarQube是将静态代码分析引入软件开发过程的出色工具。 它同时支持我们公司使用的Java和许多其他编程语言。
目前,此工具遵循单一的代码风格并防止各种类型的错误,已经紧密地进入了我们的生活。 在CI上构建时或在版本存储中接受拉取请求之前,会发现错误。 找到的所有错误都显示在Web界面中,您可以在其中进行研究和管理。
但是,麻烦在于方便的基于Web的界面并不意味着消除在项目代码中找到的注释的便利。 为了进行更正,您必须首先查看找到此注释的文件,然后打开该文件,然后再进行更正。 这也导致开发人员了解到滞后非常大的问题(有时在SonarQube中进行分析可能需要数十分钟),这对保持代码的纯度没有帮助。
为了使使用IntelliJ IDEA的公司开发人员的工作更轻松,我编写了说明。 后来,我意识到它对更广泛的专家圈可能有用,因此决定将其公开。
关于我公司的几句话由于我的文章是NPO Krista公司博客中的第一篇,因此我将写一些关于我公司的词。
我们活动的领域是州和市政府的信息技术。 我们关注政府改革的有效性,政府的有效性,公共服务的质量,财务报告的透明度,人口预算数据的公开性等。
公司的历史始于雷宾斯克。 游客有时会乘伏尔加河乘船游览我们的城市。 在雷宾斯克水库附近的地图上寻找它。 我们的生产中心,分支机构和代表处的现代地理环境要广泛得多,但是非营利组织“克里斯塔”的主要中心仍位于雷宾斯克。
首先,让我们看看SonarQube通常支持哪些检查。 首先,这些是我们自己的检查,默认检查中包含这些检查。 但是,除此之外,还有一些用于集成多个第三方分析器的插件:
每个单独的检查都可以单独配置,也可以组合成配置文件,使您可以对整个企业进行一套检查。 因此,在我们的主要配置文件中,激活了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。