当前位置: 首页 > news >正文

关于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,可以在开发阶段提前发现代码问题,提高项目代码质量。

http://www.jsqmd.com/news/1239878/

相关文章:

  • Druid SQL核心功能与性能优化实战
  • localhost与127.0.0.1的底层差异及开发实践
  • GitHub热门项目解析:OpenMontage、palmier-pro与Voicebox的技术突破
  • Strarling分布式系统设计:CAP定理实践与架构解析
  • Google C++编码规范:提升代码可读性与团队协作的工程实践
  • 5239 篇论文里的 AI 研究全景年报:我用 Open Science + CanguoAI 把四大热门领域画在了同一张地图上
  • OpenAI Codex CLI本地编程助手:安装部署与核心功能详解
  • 冰雪传奇点卡版官方下载与高效升级攻略
  • X-Boost性能优化工具实测:从环境配置到3200W高并发处理
  • 好用的灭蚊灯有哪些?灭蚊灯哪个品牌好?盘点高质量灭蚊灯十大名牌排行,家居必备选!
  • Spring Security与JWT实现前后端分离安全认证
  • 解决Docker与SELinux兼容性问题的方法
  • deveco studio loongarch应用编译
  • 用什么AI可以仿写一首流行歌曲|零基础旋律仿写、续写与配曲工具实测分享
  • 沉降缝和变形缝源头厂家哪家出货快,实力测评与价格透明**出炉 - mypinpai
  • UE5多显示器开发实战:命令行与代码精准控制程序窗口显示
  • AI Agent在水产养殖中的实践与优化
  • 深入解析C2000 ePWM动作限定器(AQ):从事件映射到波形生成
  • 跨境运营效率翻倍!速掌柜ERP,助力TemuTikTok卖家轻松突围
  • QMS来料不良数据如何同步SRM?让供应商绩效评分更精准
  • 第一次用降AI率工具怎么上手?亲测上传到出稿全过程
  • TI DCAN控制器寄存器深度解析:从奇偶校验到中断管理的实战指南
  • 伺服电机核心知识解析:原理、选型、应用与维护
  • C++核心语法万字详解:从内存管理到编译链接的深度解析
  • XSS漏洞攻防实战:从原理到靶场,掌握跨站脚本攻击与防御
  • Folk Computer:用纸张与身体交互重新定义编程体验
  • AI论文降重技术解析与工具实战指南
  • 妈妈模拟器:沉浸式体验背后的技术与应用
  • LLM状态保持故障转移:多提供商路由系统架构与实现
  • 列表、元组、字典和集合的区别