SonarQube 使用教程:从创建项目到 Maven 扫描并导出代码检测报告
一、SonarQube 简介
SonarQube 是一个开源的代码质量管理平台,可以对代码进行静态分析,帮助开发团队发现:
- Bug(代码缺陷)
- Vulnerability(安全漏洞)
- Code Smell(代码坏味道)
- 重复代码
- 代码覆盖率问题
- 代码规范问题
目前 SonarQube 支持多种开发语言:
- Java
- JavaScript
- TypeScript
- Python
- C#
- Go
- PHP 等
在 Java 项目中,通常通过Maven 插件 + SonarQube Server实现自动化代码扫描。
本文主要介绍:
Spring Boot / Maven 项目如何接入 SonarQube,并生成代码质量检测报告。
二、环境准备
1. 环境要求
本文使用环境:
| 软件 | 版本 |
|---|---|
| JDK | 17 |
| Maven | 3.9.x |
| SonarQube | 10.x |
| MySQL | 8.x |
| Spring Boot | 3.x |
确保本地已经安装:
java-versionmvn-version示例:
javaversion"17.0.12"Apache Maven3.9.9三、安装 SonarQube
1. Docker 安装方式
推荐使用 Docker 快速部署。
创建网络:
dockernetwork create sonar-net启动 PostgreSQL:
dockerrun-d\--namesonar-db\--networksonar-net\-ePOSTGRES_USER=sonar\-ePOSTGRES_PASSWORD=sonar\-ePOSTGRES_DB=sonar\postgres:15启动 SonarQube:
dockerrun-d\--namesonarqube\--networksonar-net\-p9000:9000\-eSONAR_JDBC_URL=jdbc:postgresql://sonar-db:5432/sonar\-eSONAR_JDBC_USERNAME=sonar\-eSONAR_JDBC_PASSWORD=sonar\sonarqube:community启动成功后访问:
http://localhost:9000默认账号:
用户名:admin 密码:admin首次登录需要修改密码。
四、创建 SonarQube 项目
登录 SonarQube 后:
进入:
Projects ↓ Create Project选择:
Create a local project填写项目信息:
例如:
Project display name: ruoyi-demo Project key: ruoyi-demo点击:
Set Up选择:
LocallySonarQube 会生成一个 Token。
例如:
sonar-token: xxxxxxxxxxxxxxxxxxxx这个 Token 后面 Maven 扫描需要使用。
注意:Token 只显示一次,请保存。
五、Maven 项目接入 SonarQube
1. 添加 Maven 插件
修改项目:
pom.xml增加:
<properties><sonar.projectKey>ruoyi-demo</sonar.projectKey><sonar.host.url>http://localhost:9000</sonar.host.url></properties><build><plugins><plugin><groupId>org.sonarsource.scanner.maven</groupId><artifactId>sonar-maven-plugin</artifactId><version>3.11.0.3922</version></plugin></plugins></build>其中:
| 参数 | 说明 |
|---|---|
| sonar.projectKey | SonarQube项目Key |
| sonar.host.url | SonarQube地址 |
六、执行 Maven 扫描
进入项目目录:
例如:
cdD:\workspace\ruoyi-demo执行:
mvn clean verify sonar:sonar\-Dsonar.token=你的TokenWindows 下:
mvn clean verify sonar:sonar ^-Dsonar.token=你的Token执行过程:
[INFO] BUILD SUCCESS [INFO] ANALYSIS SUCCESSFUL说明代码扫描成功。
七、查看 SonarQube 检测结果
打开:
http://localhost:9000进入:
Projects ↓ ruoyi-demo可以看到:
1. Bugs
代码 Bug 数量:
例如:
0 Bugs2. Vulnerabilities
安全漏洞:
例如:
0 Vulnerabilities3. Code Smells
代码质量问题:
例如:
25 Code Smells常见问题:
- 方法过长
- 参数过多
- 重复代码
- 命名不规范
4. Duplications
重复代码:
例如:
3.2%5. Quality Gate
质量门禁:
例如:
Passed如果失败:
Failed需要根据提示修改代码。
八、生成 SonarQube 检测报告
SonarQube 默认提供 Web 页面查看。
但是很多企业需要导出报告。
常用方式:
方式一:使用 SonarQube PDF 插件
安装插件:
sonar-pdf-report-plugin安装完成后重启 SonarQube。
进入项目:
Project ↓ More ↓ Generate PDF Report即可生成:
sonar-report.pdf方式二:使用 sonar-scanner-report
安装:
npminstall-gsonar-report执行:
sonar-report\-uadmin\-padmin\-thttp://localhost:9000\-oreport.html生成:
report.html浏览器打开即可。
方式三:通过 SonarQube API 获取数据
SonarQube 提供 REST API。
查看项目指标:
GET /api/measures/component示例:
http://localhost:9000/api/measures/component? component=ruoyi-demo& metricKeys=bugs,vulnerabilities,code_smells返回:
{"component":{"measures":[{"metric":"bugs","value":"0"},{"metric":"code_smells","value":"25"}]}}可以基于 API 自己生成:
- Excel报告
- Word报告
- PDF报告
九、常见问题
1. Maven 扫描失败
错误:
Not authorized原因:
Token错误。
解决:
重新生成 Token:
My Account ↓ Security ↓ Generate Tokens2. 找不到项目
错误:
Project doesn't exist检查:
sonar.projectKey是否和 SonarQube 创建项目一致。
3. Java版本问题
错误:
Unsupported class file major version原因:
JDK版本不匹配。
检查:
java-versionSonarQube 10.x 推荐:
JDK17十、结合 CI/CD 自动扫描
实际项目中通常会接入:
- Jenkins
- GitLab CI
- GitHub Actions
- Azure DevOps
例如 Jenkins:
代码提交
↓
自动构建
↓
Maven Test
↓
SonarQube扫描
↓
生成质量报告
实现代码质量自动检查。
十一、总结
本文完整介绍了 SonarQube 在 Maven 项目中的使用流程:
- 安装 SonarQube
- 创建项目
- 获取 Token
- Maven 集成 SonarQube
- 执行代码扫描
- 查看检测结果
- 导出代码质量报告
通过 SonarQube,可以在开发阶段提前发现代码问题,提高项目代码质量。