前言

SonarQube 是什么?
SonarQube 是一个开源的代码质量管理平台,主要用于持续检测代码中的质量问题和潜在的安全漏洞。它提供了丰富的插件支持,能够支持包括 java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。并且可以与CI/CD管道无缝集成。并且可以导出检测报告,导出功能需要添加插件。

主要功能
代码质量分析:通过静态代码分析检测代码中的缺陷、漏洞和坏味道。
技术债务管理:提供对技术债务的量化评估,帮助团队了解和管理代码库的健康状况。
报告和仪表盘:生成详细的分析报告,并通过Web界面展示各种指标和趋势。
多语言支持:支持多种编程语言(如Java、C#、JavaScript、Python等)的代码分析。

部署方式
可以在本地服务器或云端部署。
官方提供社区版、开发者版、企业版和数据中心版等多种版本,满足不同规模和需求的企业使用。

SonarScanner 是什么?
SonarScanner 是用于执行代码扫描的命令行工具。它是SonarQube的核心组件之一,负责从源代码中提取信息并将其发送到SonarQube服务器进行分析。

主要功能:
代码扫描:根据配置文件(如sonar-project.properties或Maven POM文件)执行静态代码分析。
结果上传:将扫描结果上传到SonarQube服务器进行存储和展示。
多语言支持:支持多种编程语言的代码扫描,确保跨语言项目的统一分析标准。

组件名称描述说明
SonarScanner扫描器,负责对源代码文件进行静态分析,并将分析结果(报告)发送给 SonarQube 服务器
SonarQube ServerSonarQube 服务器,负责接收并处理来自 SonarScanner 的分析报告,提供后台管理、质量管理和可视化界面
Database Server数据库服务器,用于存储项目数据、分析结果、用户配置等信息,支持 SonarQube 的持久化存储需求

老版sonarqube(支持JDK1.8+MYSQL)教程请看最下面的补充篇


安装篇

  1. 环境准备:Java11,可选:OpenJDK 或 Oracle JDK,如果sonarqube安装包带jres,也可以直接用里面的jdk(记得配置环境变量
  2. 下载好sonarqube后,解压打开bin目录,根据自己PC环境选择对应的文件运行(例如:windows-x86-64/StartSonar.bat)

运行StartSonar.bat

  1. 示例中的sonarqube使用内嵌数据库,所以无需数据库配置(不推荐,实际配置请使用PostgreSQL、Oracle 或 Microsoft SQL Server),运行完毕后启动浏览器,访问http://localhost:9000,并使用默认管理员登录账号:admin,密码:admin,登录完成修改密码

登录sonarqube

  1. 下载sonar-scanner后解压,将bin目录配置到环境变量,配置完毕通过命令验证是否成功
sonar-scanner -v 

配置篇

  1. 根据情况调整配置文件

sonarqube的配置:conf文件夹下sonar.properties

sonar.host.url=http://localhost:9000
# sonar表示数据库名字
sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public 
#数据库用户名
sonar.jdbc.username=sonar 
#数据库密码
sonar.jdbc.password=sonar

sonar-scanner的配置:conf文件夹下sonar-scanner.properties

# Configure here general information about the environment, such as the server connection details for example
# No information about specific project should appear here

#----- SonarQube server URL (default to SonarCloud)
sonar.host.url=http://localhost:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

#sonar.scanner.proxyHost=myproxy.mycompany.com
#sonar.scanner.proxyPort=8002
  1. 汉化(可选,需要下载汉化包版本与当前sonarqube版本兼容)

2.1 访问汉化插件下载地址 https://github.com/xuhuisheng/sonar-l10n-zh
2.2 根据兼容列表下载所需要的的版本(jar)
2.3 下载后,放入sonar目录(sonarqube\extensions\plugins)
2.4 然后重启sonar就汉化成功了
2.6 添加中文插件,详情见图,添加完成后重启sonarqube
添加中文

  1. 在需要检测的项目下创建sonar-project.properties文件(示例)
#key,唯一标识,直接用项目名即可
sonar.projectKey=BasicFive
sonar.projectName=BasicFive
sonar.projectVersion=0.1


# 源码路径(这里可以指定具体包含的目录,也可以相对于项目根目录)
sonar.sources=src/main/java


# 指定要扫描的包路径(多个用逗号分隔,且支持通配符递归)
sonar.inclusions=**


# 如果有测试代码,也可以选择性地排除或包含
#sonar.tests=src/test/java
#sonar.test.inclusions=

# 编译输出目录(根据实际配置修改)
sonar.java.binaries=target/classes


#忽略文件
sonar.exclusions=**/static/**


# 语言和编码
sonar.sourceEncoding=UTF-8
sonar.language=java
  1. 获取令牌 令牌为只出现一次,请注意保存
    令牌

使用篇

  1. 在项目目录下执行命令sonar-scanner -h来验证安装,之后再执行sonar-scanner -Dsonar.login+令牌(之前获取的令牌)验证身份进行扫描

新版可能会提示The property 'sonar.login' is deprecated and will be removed in the future. Please use the 'sonar.token' property instead when passing a token.我们可以将命令调整为:sonar.token

 sonar-scanner -h
 sonar-scanner -Dsonar.token=xxxxxxxxxxxxxxxxxxxxxxx

sonar-scanner

  1. 耐心等待项目扫描完成 ,最终出现以下类似link即扫描完成,然后我们就可以前往sonarqube审查我们的代码了

扫描完成

sonarqude审查


补充篇

SonarScanner7.9后不再支持Mysql,我们这里选用7.6来讲解

下载(资源来源于互联网)

SonarQube7.6+sonar-scanner+汉化

配置环境变量

配置SonarQube+sonar-scanner的环境变量

新建数据库:sonar

数据库格式建议为【utf8mb4】

配置数据库连接

Sonar配置,目录conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.port=9000

启动服务

Sonar服务启动,bin/目录下依次运行

  • InstallNTService.bat
  • StartNTService.bat
  • StartSonar.bat

访问服务

Sonar Web访问

浏览器打开:http://localhost:9000
默认管理员用户密码:admin/admin

后续可参考【配置篇】和【使用篇】


文档篇

出现下述错误:代表分配内存不够

ERROR: Failed to upload report - An error has occurred. Please contact your administrator

调整SonarQubeconf/sonar.properties(根据实际情况调整)

# WebServer 内存
sonar.web.javaOpts=-Xms512m -Xmx4g -XX:+HeapDumpOnOutOfMemoryError

# Compute Engine(CE)内存
sonar.ce.javaOpts=-Xms512m -Xmx4g -XX:+HeapDumpOnOutOfMemoryError

sonar其他常见问题和使用文档:https://docs.sonarqube.org/latest/

Last modification:July 15, 2025
如果觉得我的文章对你有用,您可以给博主买一杯果汁,谢谢!