sonar安装及使用教程

 

须知:这里使用sonarQube7.9版本(持续更新且稳定),数据库使用pg10版本

1.  简介

(1) sonar是什么

Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。

(2) SonarQube与Sonar

SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,用来发布应用,在线浏览分析等。

2.安装

官网下载后解压即可,下载后启动StartSonar.bat,去浏览器访问localhost:9000端口(默认9000端口,可改动)出现下图说明启动成功(sonarQube内置h2数据库,不配置数据库也可用于测试)

JDK使用11版本(如果出现远程主机强迫关闭了一个现有的连接。没配置数据库之前为端口占用问题,去配置文件里将端口号改成其他的即可,或者去命令行里查看9000端口被那个进程占用,结束他即可,

推荐更改端口号(sonar.properties文件中的sonar.web.port=要修改的端口号),

sonar安装及使用教程

sonar.web.port=9090

配置数据库了是sonar连不上数据库或端口占用,测试数据库是否可以连接)

 

sonar安装及使用教程

 

 

 

3.配置数据库

 

这里采用pg数据库10版本(sonarQube7.9及以上版本不支持mysql),若要使用mysql数据库则安装7.8版本且mysql为5.7版本(sonarQube不支持mysql5.7以下和8及以上版本)

 

去pg里新建sonar数据库,去sonarqube-7.9.5\conf修改

 

sonar.properties文件

sonar安装及使用教程

 

 

 

sonar.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=public
sonar.jdbc.username=mypostgres
sonar.jdbc.password=mypostgres
sonar.web.port=9090

 

重启sonarQube等待一会,直到出现sonarQube is up字样

sonar安装及使用教程

 

 

 

启动完毕后去sonarQube查看配置及数据库。

sonar安装及使用教程

 

 

 sonar安装及使用教程

 

 

 

 

3. 代码分析

下载下载sonar-scanner,解压,配置环境变量,以为win10为例  选中path--编辑--新建--输入地址 C:\sonar-scanner-4.5.0.2216-windows\bin

sonar安装及使用教程

 

 

 

环境变量配置了后确认无误,单还是提示不是内部或外部命令,去path里把sonar-canner环境变量往上提升到前三位置

 

输入sonar-scanner --version出现版本信息表示配置成功

 sonar安装及使用教程

 

 

 

4.1代码分析(单项目单模块)

 sonar安装及使用教程

 

 

 

去需要分析的项目根目录下新建sonar-project.properties文件,内容为

# must be unique in a given SonarQube instance

sonar.projectKey=my:project

# this is the name displayed in the SonarQube UI

sonar.projectName=springboot-ssm

sonar.projectVersion=1.0

 

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.

# Since SonarQube 4.2, this property is optional if sonar.modules is set.

# If not set, SonarQube starts looking for source code from the directory containing

# the sonar-project.properties file.

sonar.sources=src/main/java

sonar.java.binaries=./target/classes

 

# Encoding of the source code. Default is default system encoding

#sonar.sourceEncoding=UTF-8

字段意思:

Sonar.projectKey:项目的key,包住唯一即可,一般为项目名称

sonar.projectName:项目名称

sonar.projectVersion:版本号

sonar.sources:是源文件所在的目录

sonar.java.binaries:项目编译后的class文件的目录

 sonar安装及使用教程

 

 

 文件配置好后,修改sonar-scanner.properties配置文件,配置扫描的结果同步到哪个数据库

sonar安装及使用教程

 

 

 

sonar.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=public
sonar.jdbc.username=mypostgres
sonar.jdbc.password=mypostgres
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
sonar.host.url=http://localhost:9090

都配置好后,win+R,cd命令跳转到根目录执行sonar-scanner命令,执行成功则出现如下界面:

 sonar安装及使用教程

 

 

 

 

访问9000端口的Issues(问题)查看分析结果

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 

可在左侧的我的问题中选择代码存在的问题的种类

 sonar安装及使用教程

 

 

4.2单项目(多模块)

 sonar安装及使用教程

 

 

sonar-project.properties配置,简单版示例,

#项目id,唯一标识
sonar.projectKey=my:project
#项目名
sonar.projectName=my_project
#版本
sonar.projectVersion=1.0
#扫描源码,多模块,每个模块用逗号分割
ds-eop.sonar.sources=xxx/src/main/java,
                                   xxx-client/src/main/java,
                                   xxx-web/src/main/java,
                                   xxx-war/src/main/java
#编译好的class文件存放位置
ds-eop-client.sonar.java.binaries=./xxx/target/classes
                                                    ./xxx-client/target/classes,
                                                    ./xxx-web/target/classes,
                                                    ./xxx-war/target/classes

与单模块类似,只是在sources里的扫描文件变为多个,以逗号隔开,binaries也类似。

  1. 扫描web项目

先到配置-应用市场-插件里下载web插件

 sonar安装及使用教程

 

 

然后新建项目

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 sonar安装及使用教程

 

 

去根目录下执行此命令

 

补充:

sonar-scanner的配置也可以进行分模块配置,比如我想检测一个web项目的所有文件(包括Java、JSP、JS、Html、XML),如下:

如果检测html和JSP需要下载sonar-html-plugin-3.1.0.1615.jar插件置于extensions\plugins目录下,而且html的language为web,jsp的language为jsp

# must be unique in a given SonarQube instance

sonar.projectKey=my:project

# this is the name displayed in the SonarQube UI

sonar.projectName=sonarTest

sonar.projectVersion=1.0

sonar.modules=java-module,javascript-module,xml-module,jsp-module,html-module

sonar.sourceEncoding=UTF-8

 

# Java module

java-module.sonar.projectName=Java Module

java-module.sonar.language=java

java-module.sonar.projectBaseDir=.

java-module.sonar.sources=src

#ignore files and directory

java-module.sonar.exclusions=src/cn/qlq/test2/**,src/cn/qlq/test3.java

sonar.java.binaries=./build

 

# JavaScript module

javascript-module.sonar.projectName=JavaScript Module

javascript-module.sonar.projectBaseDir=.

javascript-module.sonar.language=js

javascript-module.sonar.sources=WebContent

 

# Jsp module

jsp-module.sonar.projectName=Jsp Module

jsp-module.sonar.projectBaseDir=.

jsp-module.sonar.language=jsp

jsp-module.sonar.sources=WebContent

 

# Html module

html-module.sonar.projectName=Html Module

html-module.sonar.projectBaseDir=.

html-module.sonar.language=web

html-module.sonar.sources=WebContent

 

#Xml module

xml-module.sonar.projectName=Xml Module

xml-module.sonar.projectBaseDir=.

xml-module.sonar.language=xml

xml-module.sonar.sources=WebContent

 

#项目id,唯一标识
sonar.projectKey=my:project
#项目名
sonar.projectName=my_project
#版本
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
#包含模块
sonar.modules=xxx,xxx-client,xxx-war,xxx-web


xxx.sonar.projectName=xxx
xxx.sonar.modules=java-module,xml-module

# Java module 
xxx.java-module.sonar.projectName=xxx-java-module
xxx.java-module.sonar.sources=src/main/java,src/test/java
xxx.java-module.sonar.java.binaries=./target/classes
xxx.java-module.sonar.language=java
xxx.java-module.sonar.projectBaseDir=.

#Xml module 
xxx.xml-module.sonar.projectName=xxx-xml-module
xxx.xml-module.sonar.projectBaseDir=.
xxx.xml-module.sonar.language=xml
xxx.xml-module.sonar.sources=src/main/resources,src/test/resources

####################################################################################################

xxx-client.sonar.projectName=xxx-client
xxx-client.sonar.modules=java-module,xml-module

xxx-client.java-module.sonar.projectName=xxx-client-java-module
xxx-client.java-module.sonar.sources=src/main/java,src/test/java
xxx-client.java-module.sonar.java.binaries=./target/classes
xxx-client.java-module.sonar.language=java
xxx-client.java-module.sonar.projectBaseDir=.

xxx-client.xml-module.sonar.projectName=xxx-client-xml-module
xxx-client.xml-module.sonar.projectBaseDir=.
xxx-client.xml-module.sonar.language=xml
xxx-client.xml-module.sonar.sources=src/main/resources,src/test/resources

####################################################################################################
xxx-web.sonar.projectName=xxx-web
xxx-web.sonar.modules=java-module,xml-module

xxx-web.java-module.sonar.projectName=xxx-web-java-module
xxx-web.java-module.sonar.sources=src/main/java,src/test/java
xxx-web.java-module.sonar.java.binaries=./target/classes
xxx-web.java-module.sonar.language=java
xxx-web.java-module.sonar.projectBaseDir=.

xxx-web.xml-module.sonar.projectName=xxx-web-xml-module
xxx-web.xml-module.sonar.projectBaseDir=.
xxx-web.xml-module.sonar.language=xml
xxx-web.xml-module.sonar.sources=src/main/resources,src/test/resources

####################################################################################################
xxx-war.sonar.projectName=xxx-war
xxx-war.sonar.modules=java-module,xml-module,html-javascript-module

xxx-war.java-module.sonar.projectName=xxx-war-java-module
xxx-war.java-module.sonar.sources=src/main/java,src/test/java
xxx-war.java-module.sonar.java.binaries=./target/classes
xxx-war.java-module.sonar.language=java
xxx-war.java-module.sonar.projectBaseDir=.

xxx-war.xml-module.sonar.projectName=xxx-war-xml-module
xxx-war.xml-module.sonar.projectBaseDir=.
xxx-war.xml-module.sonar.language=xml
xxx-war.xml-module.sonar.sources=src/main/resources,src/test/resources


# html-javascript-module
xxx-war.html-javascript-module.sonar.projectName=xxx-war-javaScript-module
xxx-war.html-javascript-module.sonar.projectBaseDir=.
xxx-war.html-javascript-module.sonar.language=web,js
xxx-war.html-javascript-module.sonar.sources=src/main/webapp

# javascript-html-module
xxx-war.javascript-html-module.sonar.projectName=xxx-war-javaScript-module
xxx-war.javascript-html-module.sonar.projectBaseDir=.
xxx-war.javascript-html-module.sonar.language=js,web
xxx-war.javascript-html-module.sonar.sources=src/main/webapp

 

 

汉化:到https://docs.sonarqube.org/display/PLUG/Plugin+Library 网站搜索 chinese pack 找到自己的版本对应的jar包版本

然后点击到对应的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下载对应版本的jar包,下载之后放到extensions\plugins目录下面重启即可,

5. 注册为windows服务

去conf目录下打开wrapper.conf文件,将wrapper.java.command的java改问jdk中java.exe的绝对路径

 sonar安装及使用教程

 

 

sonar自带的有注册与删除服务的方法,采用wrapper注册为服务,如下已管理员方式运行InstallNTService.bat即

 sonar安装及使用教程

 

 

 

 

集成阿里p3c规则:

1.下载插件 

 p3c的jar包为3.2版本,版本不对可能启动不了sonar-pmd-plugin-3.2.0-SNAPSHOT.jar

2.jar放在sonarqube-7.9.5\extensions\plugins目录下

3.重启sonarqube

4.去质量配置,右上角,创建,名字自定义,语言java

 sonar安装及使用教程

 

 

5.到网页规则搜索p3c,如下

 sonar安装及使用教程

 

 

 

  1. 接下来激活p3c规则 (选择上面的创建的p3c,同时搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自带规则就不要加搜索条件,选择所有的规则)

 sonar安装及使用教程

 

 

  1. 查看p3c激活的规则

 sonar安装及使用教程

 

 

  1.  到质量配置设为java默认规则即可

 

 sonar安装及使用教程

 

上一篇:Sonar-Scanner-Engine源码分析


下一篇:sonar-scanner安装最佳实践