sonar 介绍
Sonar全称SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以多维度检测代码质量,是代码审查利器
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测 ,可以帮我们分析bug, 漏洞,异味,代码覆盖率,及代码重复问题。
Sonar 并不是简单地把不同的代码检查工具结果直接显示在 WEB页 面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便的不同规模和种类的工程进行代码质量管理。
sonar-7.8 win安装与配置
使用 sonarqube 对 java 项目代码进行扫描的时候,java 项目的版本不能低于 sonar 的编译版本。
sonarqube:7.8-community 是 sonar 对 jdk1.8 的最后一个版本,从 7.9 以后 sonar 最低支持版本为 jdk 1.11
7.8版本以后不再支持
MySQL
,将使用PostgreSQL
由于项目java项目是使用jdk1.8编译的,因此这里安装sonar-7.8版本为例
环境准备
jdk 1.8 下载并安装(略)
sonarqube 7.8下载:https://www.sonarqube.org/
sonar-scanner 4.2.0 下载:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
postgresql 12.11 下载:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
PostgreSQL安装与配置
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)
安装PostgreSQL
双击exe安装包,一路next。只需修改安装路径,设置超级用户密码,其他选项建议默认值即可
超级用户用户名为:postgres
配置PostgreSQL
运行pgAdmin4,以postgres用户登陆成功后,创建为sonarQube专用的sonar用户
如下图,在General中设置用户名为sonar,Privileges中控制权限。用户名为sonar,密码为sonar
创建成功之后,在面板当中可看到sonar用户。
创建sonar7.8数据库,所属者设为sonar
SonarQube安装与启动
配置SonarQube
下载完后,是一个 zip 压缩包。直接解压到目标目录即可,这里解压到
D:\sonarqube-7.8
在
conf\sonar.properties
中正确配置数据库信息,内容如下# User credentials. # Permissions to create tables, indices and triggers must be granted to JDBC user. # The schema must be created first. sonar.jdbc.username=sonar sonar.jdbc.password=sonar #----- PostgreSQL 9.3 or greater # By default the schema named "public" is used. It can be overridden with the parameter "currentSchema". #sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonar7.8?currentSchema=public
注意在
conf/wrapper.conf
中指定jdk(如果已设置jdk环境变量,可忽略),如下wrapper.java.command=C:\Program Files\Java\jdk1.8.0_161\bin\java.exe
启动SonarQube
执行bin目录下的启动脚本
访问
http://127.0.0.1:9000/
, 管理员账号密码默认为admin
SonarScanner安装与使用
安装SonarScanner
下载完后,是一个 zip 压缩包。直接解压到目标目录即可,这里解压到
D:\sonar-scanner
配置系统环境变量
SONAR_SCANNER_HOME=D:\sonar-scanner PATH=%PATH%;%SONAR_SCANNER_HOME%\bin
检查是否安装成功
sonar-scanner --version
SonarScanner配置文件
#----- Default SonarQube server sonar.host.url=http://localhost:9000 #----- Default source code encoding sonar.sourceEncoding=UTF-8
- 其中 sonar.host.url 配置项是 SonarQube 服务器的地址,根据具体情况配置
使用SonarScanner静态分析
项目配置
在项目根目录中,创建配置文件
sonar-project.properties
# 项目名称 sonar.projectKey=demo-mgr sonar.projectName=demo-mgr sonar.projectVersion=1.0 #代码路径 sonar.sources=./src # class路径 sonar.java.binaries=./target/classes # 语言格式 sonar.language=java
# 项目多模块情况 # 项目名称 sonar.projectName=demo sonar.projectKey=demo sonar.projectVersion=0.0.0.1 # sonar 配置 sonar.forceAnalysis=true sonar.sourceEncoding=UTF-8 sonar.language=java sonar.login=admin sonar.password=admin #代码路径 sonar.sources=src/main/java sonar.modules=moduleOne,moduleTwo # moduleOne.sonar.modules=oneSub1,oneSub2 # class路径 sonar.java.binaries=./target/classes
执行扫描
在
sonar-project.properties
所在目录中,执行扫描命令如下:sonar-scanner
分析成功如下:
查看分析报告
sonar-8.9 win安装与配置
环境准备
jdk 1.11 下载并配置好JDK环境变量(略)
sonarqube 8.9 下载:https://www.sonarqube.org/
sonar-scanner 4.2.0 下载:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
postgresql 12.11 下载:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
安装与配置
安装与配置过程同前面《sonar-7.8 win安装与配置》
区别位置:
注意需安装jdk 1.11
配置PostgreSQL时,可以创建数据库名
sonar8.9
以区分配置SonarQube时,注意在
conf/wrapper.conf
中指定jdk,如下wrapper.java.command=C:\Program Files\Java\jdk-11.0.6\bin\java.exe
配置SonarQube时,注意在
conf\sonar.properties
中正确配置数据库信息,如下# User credentials. # Permissions to create tables, indices and triggers must be granted to JDBC user. # The schema must be created first. sonar.jdbc.username=sonar sonar.jdbc.password=sonar #----- PostgreSQL 9.3 or greater # By default the schema named "public" is used. It can be overridden with the parameter "currentSchema". #sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonar8.9?currentSchema=public
sonar 代码扫描
mvn配合使用
jenkins配置使用
pycharm配置使用
sonar 设置
新代码周期
安装插件sonarqube-community-branch-plugin:https://github.com/mc1arke/sonarqube-community-branch-plugin/releases
sonar8.9对应插件sonarqube-community-branch-plugin-1.8.1.jar 网盘下载:https://pan.baidu.com/s/1tQtSnyaX3owCiMVdFI3yZw?pwd=pl5o
sonar 规则
将PMD规则添加到JAVA项目
下载安装PMD插件:https://github.com/jborgers/sonar-pmd/releases
将下载后的jar包放到`extensions\plugins目录下,重启sonarqube即可
添加pmd规则
复制内置规则,然后编辑规则:激活更多规则,设置为默认或在规则内指定项目。
版本问题
如果我们项目项目用的是jdk1.8,同时还使用了1.8里面的一些后续版本不在兼容的包类,如:rt.jar里面的
sun.misc.BASE64Decoder
、javax.xml.bind.Marshaller
等。用jdk11来运行就会报错。mvn clean test sonar:sonar [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project iccboy-sonar-test: Compilation failure [ERROR] /opt/code/iccboy-sonar-test/iccboy-sonar/iccboy-sonar-common/src/main/java/com/iccboy/sonar/test/common/utils/FileUtil.java:[8,16] 找不到符号 [ERROR] 符号: 类 BASE64Decoder [ERROR] 位置: 程序包 sun.misc
如果我们用jdk8来执行,则优化报sonar的class编译文件解析不对的问题(Java.lang.UnsupportedClassVersionError)
mvn clean test sonar:sonar [ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.0.2155:sonar (default-cli) on project iccboy-sonar-test: Execution default-cli of goal org.sonarsou rce.scanner.maven:sonar-maven-plugin:3.9.0.2155:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.0.2155:sonar: java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), th is version of the Java Runtime only recognizes class file versions up to 52.0
为了解决上面的问题,则将命令分步骤执行
第一步先用jdk8执行项目的编译和测试
export JAVA_HOME=/usr/local/jdk8/jdk1.8.0_211 mvn clean test
第二步再用jdk11执行sonar命令
export JAVA_HOME=/usr/local/jdk11/jdk-11.0.14 mvn sonar:sonar
如果是windows环境,则将
export
改为set
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。