Windows下配置SonarQube Scanner检测分析代码

首先这里继续引用下SonarQube的架构图,在上文中记录了Windows下SonarQube服务及数据库环境的配置,本文则在此基础上,简单记录SonarQube Scanner代码分析工具的配置及使用,文中发现有问题或疏漏,希望可以得到您的反馈。
对于SonarQube Scanner这里不做太多介绍了,至于为什么使用SonarQube Scanner,看这里

SonarQube官方文档 推荐使用,更多原因,自行百度了~
Maven配置SonarQube Scannar实现代码分析
此处通过在Maven中配置Sonar Scanner,然后使用
mvn sonar:sonar
命令完成对代码的分析,该方式针对Maven构建项目,Gradle构建的项目未测试,自行尝试。
Maven环境配置
为了可以使用Maven命令运行Sonar来分析项目代码,首先需要将Maven的bin目录添加到环变量内,如下:

配置完成后,在命令行窗口使用命令 mvn -v
查看Maven版本等信息,验证环境变量配置完成

Maven增加SonarQube Scanner配置
首先在 Maven 的 conf
目录下找到Maven的配置文件 settings.xml
,搜索到 <profiles>
节点,在其中添加SonarQube Scanner的配置,如下图:
<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="xml" contenteditable="true" cid="n7092" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"> <profiles>
<!-- 复制以下内容 -->
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar服务地址,此处为本地服务 -->
<sonar.host.url>
http://127.0.0.1:9000/
</sonar.host.url>
</properties>
</profile>
<!-- 复制以上内容 -->
</profiles></pre>
注意: 若在Maven的
conf
目录下未找到settings.xml
配置文件,则可以在Maven仓库默认目录C:\Users\[你登陆账号的用户名]\.m2
下查找。
Maven项目目录执行命令分析
进入想要检测分析的Maven项目目录,在项目根目录打开命令行,输入命令 mvn sonar:sonar

首次进行代码检测扫描时,会下载SonarQube Scanner相关jar包,类似下图:

扫描完成后,会看到 BUILD SUCCESS
的提示,到此代码的检测扫描完成。

IDEA内通过Maven执行SonarQube Scanner分析
下面介绍,在上步操作完成的基础上,怎么在IDEA开发工具内使用使用SonarQube Scanner进行代码检测分析。
首先IDEA打开需要检测分析的Maven项目,在 Run/Debug Configurations
中,添加一个Maven的运行配置,具体配置如下:



配置完成后,选择此运行方式,点击运行,控制台可以看到类似上步中命令行窗口的输出内容,等待出现 BUILD SUCCES
的提示字样后,表示代码的检测分析完成,此时可以在SonarQube服务内查看分析结果。此处仅测试IDEA环境,Eclipse等其他IDE开发工具自行测试。
SonarQube Scanner配置
前面说了Maven使用SonarQube Scanner完成对Maven代码的检测分析,下面记录直接下载的SonarQube Scanner配置及使用。
SonarQube Scanner下载
可以在此处下载支持各种环境的SonarQube Scanner,根据自己需要进行选择即可。在SonarQube官网下载对应系统版本的SonarQube Scanner cli,该版本支持命令行模式。

下载完成后,任意目录下解压,目录结构大致如下,目录作用类似SonarQube

SonarQube Scanner配置
-
配置环境变量(为了可以全局使用SonarQube Scanner)
image
-
验证环境变量是否配置成功
image
-
添加检测扫描的项目 打开SonarQube Scanner的配置文件(
..\sonar-scanner-3.2.0.1227-windows\conf\sonar-scanner.properties
) ,配置如下
<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="yaml" contenteditable="true" cid="n7131" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"> #----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
# 配置项目的Key(每个项目唯一的项目键,使用Maven时设置为 <groupId>:<artifactId>)
sonar.projectKey=com.codersoft:cms
# 配置分析的项目在SonarQube服务界面显示的名称
sonar.projectName=cms
# 配置分析的项目的版本(使用Maven时取<version>的值)
sonar.projectVersion=1.0
# 配置要分析的项目根目录
sonar.projectBaseDir=D:/work/workspace/gitee/cms/rbac/cms
# 配置包含源文件的目录(未设置,则从默认的Maven源代码位置检索)
sonar.sources=.
</pre>
添加完成后,命令行窗口,执行命令 sonar-scanner -Dsonar.java.binaries=.
(SonarQube的sonar-java-plugin插件版本大于4.12后,不能直接使用 sonar-scanner
命令,需要提供对应源码的字节码,详情看文末异常问题记录)
更多SonarQube Scanner内容见SonarQube官网文档, 更多SonarQube配置的分析参数见此处
IDEA配置SonarLint插件
IDEA支持不少用于代码质量检测的插件,如阿里巴巴的代码规范插件、FindBugs等,此处可以尝试使用SonarLint插件。
SonarLint插件安装
在IDEA中打开设置界面( File -> Settings
) , 选择 Plugins
进入IDEA的插件市场搜索 SonarLint
进行安装

等待下载安装完成后,重启的IDEA中即可完成安装。
安装完成重启IDEA后,会出现如下提示,此时需要对SonarLint插件进行配置

安装提示,点击 SonarLint project configuration
进行SonarLint 项目的配置

或在设置中进行配置

此处关闭远端SonarQube Server的绑定,即使用本地SentLint插件默认的代码检测规则。这样就可以在本地环境下使用默认规则进行代码检测分析,可以点击菜单项 Analyze
,找到 Aanlyze all files with SonarLint
的子菜单项

尝试点击此项,来检测分析当前项目的所有文件


单个文件的检测,可以在想检测文件右键选择 SonarLint
进行检测,具体操作此处不赘述。
SonarLint插件配置
SonarQube可以针对项目进行检测规则等设置,要让IDEA中SonarLint插件同步使用SonarQube服务中更新的规则,则需要如下配置
-
配置SonarQube Server
image
支持两种登陆验证方式,此处使用本地SonarQube服务,则使用账号密码登陆(远端项目,可以使用Token验证)
image
image
-
绑定配置SonarQube服务内的项目,用于同步检测规则
image
注意:SonarQube没有服务时,此处无法配置,可以通过SonarQube Scanner或Maven来进行项目代码的检测分析,实现项目的添加。 配置完成后,回到服务配置界面,点击更新规则,即可获取SonarQube服务上针对该项目配置的检测规则。
最后,SonarQube的Token,可以在用户设置里进行增删

SonarQube服务内查看分析结果
完成代码的分析检测后,可以在浏览器访问SonarQube服务地址,此处为本地搭建服务,则访问地址 http:\\localhost:9000

可以在Sonar服务管理页面内看到新扫描的Maven项目的分析报告,此时根据需要查看对应内容,不再赘述。
SonarQube Scanner异常问题记录
SonarQube Scanner执行
sonar-scanner
命令时,出现错误时,可以通过执行sonar-scanner -X
来输出详细错误日志,方便问题的排查。
异常 AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
该问题原因见官方文档

大体意思,自SonarJava 4.12后,不使用Maven或Gradle构建工具来分析代码时,必须手动提供与源代码对应的字节码,否则就会分析失败,并出现该异常提示。
可以尝试通过以下方式处理:
-
执行命令修改为
sonar-scanner -Dsonar.java.binaries=.
-
或在配置文件内添加下列配置(追加内容在上文基础上进行)
<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="" contenteditable="true" cid="n7188" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px 0px; margin-bottom: 15px; margin-top: 15px; width: inherit;"> # sonar.sources=.
此处配置该项目的子项目的源码文件目录
sonar.sources=./cms-common/src,./cms-dao/src,./cms-service/src,./cms-tester/src,./cms-web/src
SonarJava 4.12 以后,不使用Maven等构建工具分析代码,则必须手动提供对应源代码的字节码
此处配置该项目的子项目的class字节码文件目录
sonar.java.binaries=./cms-common/target/classes,./cms-dao/target/classes,./cms-service/target/classes,./cms-tester/target/test-classes,./cms-web/target/classes
</pre> -
下载SonarJava 4.12之前版本的插件,替换现有版本,插件源码下载地址,插件jar包下载地址image
下载完成后,替换..\sonarqube-6.7.5\extensions\plugins\
目录下的sonar-java-plugin-xxx.jar
(本文SonarQube的SonarJava插件版本为5.7.0.15470
) ,重启SonarQube服务即可。
网上很多文章提供第三种方法解决该异常,我下载了 4.10.0.10260
版本的java插件jar包,按照此思路替换插件jar包后,重启服务,如出现下图提示情况

且运行 sonar-scanner
命令出现SonarQube服务(本文已经将SonarQube服务配置为系统服务)停止的情况,在尝试清理 c:\user\[你当前登陆计算机的用户名]\.sonar
下的文件全部删除,然后重启服务,依旧出现上文提示,且服务过一段时间也会停止运行。具体原因暂不明确,初步认为是插件版本问题,不知是否还有还是其他问题,未做更多版本测试,本文暂不推荐第三种方法处理,如遇到此情况,且知道解决方案的希望告知,谢谢。
Windows下配置SonarQube Scanner检测分析代码
网友评论