本文的背景是,公司有个项目上线验收,需要提供代码检测报告,综合考虑采取了Sonar的方案。
主要讲述采用SonarQube+SonarScanner来进行代码检测,并网上找了开源的导出sonar检测报告PDF的插件。
一、sonarqube 的安装与启用
1. sonarqube 获取
下载地址: 官方网站
注意,我这边为了能够使用pdf插件(下载地址),选择的sonarqube版本为9.9.9LTA版本,亲测如果用目前官网最新25+版本,这个生产pdf的插件不支持,会各种错误。
与此对应,后续的SonarScanner也是下载的4.8.x版本。
本机环境是windows11

下载后解压即可(目录别带中文及空格等特殊符号,防止有问题)
2.SonarQube配置
SonarQube支持多种数据库,如Oracle、postgresql、sqlserver等等,按需选择,我这里用的本地的pgsql。
如上图,修改sonar.properties配置文件,添加如下配置:
(不同数据库的sonar.jdbc.url配置不一样,配置文件中有,直接搜一下就行,配置文件中也可以看到支持哪些数据库)
csharp
# 指定pg数据库
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube_old?currentSchema=public
# 指定数据库用户名
sonar.jdbc.username=postgres
# 指定数据库密码
sonar.jdbc.password=postgres
# 指定端口
sonar.web.port=9000

3.启动SonarQube
前提:本机安装好jdk17并配置好环境变量(亲测,用jdk17可用)
如图,cmd中直接运行StartSonar.bat命令(或直接双击,我是直接cmd中命令启动的,一开始安装25+版本的时候,直接双击,报错后直接终端窗口闪退)
启动后如下图,见到圈出来的,即为启动成功(如果启动失败可以看/logs文件夹下的日志,再进行对应处理)
4.访问
浏览器访问localhost:9000,跳转到如图登录界面,首次登录需要修改密码。
初始账号密码:admin/admin
二、SonarScanner 插件的安装与配置
1.下载SonarScanner
前面提过,为了使用后面的pdf生成插件,使用了SonarQube9.x版本,这里为了和SonarQube9.x适配,SonarScanner这里版本选择4.8.x
下载地址
下载解压后即可使用。
2.配置SonarScanner环境变量
编辑系统环境变量path,填写SonarScanner安装目录
验证sonar scanner环境变量是否成功:
任意位置,cmd,输入命令 sonar-scanner -v,能够如图显示出版本信息即可(不要被输出的java 11.xxx误解!!不要被误解需要jdk11,jdk就用之前说的17就行!!!)
3.SonarScanner配置

如图,配置SonarQube的本机地址以及编码,和前面SonarQube配置文件一样配置数据库信息(这里有些文章写的要配,有的不用,我也不清楚,没细研究,我这里是配了,没有尝试不配置的话会不会有问题)
到此,前置准备已做好,下面开始做代码检测
说明:SonarQube是支持很多种检测代码的方式的(即create project的方式,如下图:)
因为我这里是为了应付项目验收,没有尝试去用gitlab github gitee等代码仓库去进行代码检测,也没有结合jenkins去做cicd时触发代码检测(有兴趣的话可以研究一下,理想方案是,gitlab+jenkins,以及部署一台sonarqube服务器,把代码检测嵌入到cicd流程中去)
三、安装pdf插件
1.下载
下载地址,直接下载jar包
2.存放
放到SonarQube安装位置如图
然后重启SonarQube
3.SonarQube中PDF配置
重启后,SonarQube中,如图会出现个PDF Report菜单,在这其中配置密码和用户名,直接用登录的用户名密码就行。
然后进行后面的代码检测。(如果说还没安装这个PDF插件前,就进行了代码检测,那么需要在SonarQube中删除后,重新进行代码检测)
三、本地代码检测
1.拉取代码到本地
按需择选分支,然后一定要maven package打包(我这里是java项目,sonar必须要检测.class文件,所以要先package)
2.配置文件
参照官网地址,在项目根目录创建sonar-project.properties配置文件
csharp
# must be unique in a given SonarQube Server instance
sonar.projectKey=test
# --- optional properties ---
# defaults to project key
#sonar.projectName=My project
# defaults to 'not provided'
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
#sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
sonar.login=squ_2d90616f765696baabccf63f70182f8998e9abc9
sonar.java.binaries=/target/classes,/target/classes,/target/classes,xxx/target/classes
其中有三个配置比较重要:
-
sonar.projectKey
自定义的项目名称,检测成功后,SonarQube的project中会根据这个名字进行显示,生成出的pdf也是基于这个名字。
-
sonar.login
这里要从sonarqube图形化界面中,去生成token(9.X版本配置名为sonar.login,如果是高版本,应该是sonar.token)
获取位置:菜单Administration->Security->用户后面的Tokens
-
sonar.java.binaries
这个配置是指定需要检测的代码的位置,如果多个的话,可以逗号分隔
3.代码检测
- sonar-scanner开始扫描检测
sonar-project.properties配置文件同级下,cmd终端,输入命令 sonar-scanner 开始进行代码检测,如下图,最终显示EXECUTION SUCCESS即为成功。
- 返回SonarQube
即可看到projects下,出现了对应的项目
可以点进去查看项目检测的详情,以及如图,可以下载pdf