关于SonarQube

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. 环境要求

本文使用环境:

软件版本
JDK17
Maven3.9.x
SonarQube10.x
MySQL8.x
Spring Boot3.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

选择:

Locally

SonarQube 会生成一个 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.projectKeySonarQube项目Key
sonar.host.urlSonarQube地址

六、执行 Maven 扫描

进入项目目录:

例如:

cdD:\workspace\ruoyi-demo

执行:

mvn clean verify sonar:sonar\-Dsonar.token=你的Token

Windows 下:

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 Bugs

2. Vulnerabilities

安全漏洞:

例如:

0 Vulnerabilities

3. 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 Tokens

2. 找不到项目

错误:

Project doesn't exist

检查:

sonar.projectKey

是否和 SonarQube 创建项目一致。


3. Java版本问题

错误:

Unsupported class file major version

原因:

JDK版本不匹配。

检查:

java-version

SonarQube 10.x 推荐:

JDK17

十、结合 CI/CD 自动扫描

实际项目中通常会接入:

  • Jenkins
  • GitLab CI
  • GitHub Actions
  • Azure DevOps

例如 Jenkins:

代码提交

自动构建

Maven Test

SonarQube扫描

生成质量报告

实现代码质量自动检查。


十一、总结

本文完整介绍了 SonarQube 在 Maven 项目中的使用流程:

  1. 安装 SonarQube
  2. 创建项目
  3. 获取 Token
  4. Maven 集成 SonarQube
  5. 执行代码扫描
  6. 查看检测结果
  7. 导出代码质量报告

通过 SonarQube,可以在开发阶段提前发现代码问题,提高项目代码质量。