我们所说的SonarQube实际分为两个部分,一个为服务器SonarQube,一个为扫描器Sonar-Scanner。
服务器主要是用来定义扫描规则,存放扫描代码之后的检测结果。
Sonar-Scanner是用来扫描代码做具体事情的。
一、SonarQube的安装
这里以windows为例
SonarQube下载地址https://www.sonarqube.org/downloads/
下载后解压:
我下的版本为sonarqube-8.9.1.44547
注意sonarqube7.9以后就不支持mysql数据库了,所以要用其他的数据库,我这里用的是postgresql,并且需要Java11+
在conf目录下配置
sonar.properties
添加如下配置
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=postgres
sonar.jdbc.password=1234
sonar.sorceEncoding=UTF-8
sonar.login=admin
在bin目录下根据自己的操作系统选择启动就行了,我这里用windows,双击StartSonar.bat即可
出现如下结果即为成功启动。
访问 http://localhost:9000/出现表示成功
二、Sonar-Scanner的安装
下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
sonar-Scanner的配置在conf下的sonar-scanner.properties
配置如下
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=postgres
sonar.jdbc.password=1234
sonar.login=admin
sonar.password=1234
添加到环境变量path中
查看结果命令行下输入sonar-scanner -version出现结果表示成功
三、代码扫描,这里介绍两种方式扫描
1.sonar-scanner 命令扫描
在要扫描的项目根目录下创建一个sonar-project.properties文件
文件中写如下配置
sonar.projectKey=sonar
sonar.projectName=sonar-name
sonar.version=0.0.1-SNAPSHOT
sonar.sources=E:/sonarqube/src/main/java
sonar.java.binaries=E:/sonarqube/target/classes
然后到项目目录下使用打开命令行输入sonar-scanner命令,就会开始分析代码,并将结果上传到sonar服务器
可以在服务器上看到分析的结果
2.sonar-scanner-api Java程序扫描
这种扫描方式使用的是sonar-scanner-api,添加pom依赖到pom文件
<!-- https://mvnrepository.com/artifact/org.sonarsource.scanner.api/sonar-scanner-api -->
<dependency>
<groupId>org.sonarsource.scanner.api</groupId>
<artifactId>sonar-scanner-api</artifactId>
<version>2.16.1.361</version>
</dependency>
实现代码如下
public static void main(String[] args) throws GitAPIException {
LogOutput logOutput = new StdOutLogOutput();
Map<String, String> sonarPropertiesMap = new LinkedHashMap<String, String>() {{
put("sonar.host.url", "http://localhost:9000/");
put("sonar.sourceEncoding", "UTF-8");
put("sonar.login", "admin");
put("sonar.password", "1234");
}};
Map<String, String> projectSettingMap = new LinkedHashMap<String, String>() {{
put(ScanProperties.PROJECT_KEY, "pms");
put(ScanProperties.PROJECT_NAME,"pms-git-name");
put(ScanProperties.PROJECT_SOURCE_ENCODING, "UTF-8");
put(ScanProperties.PROJECT_BASEDIR,"D:\\pms");
put("sonar.java.binaries", "D:\\pms");
put(ScanProperties.SKIP, "D:\\pms\\.git,D:\\pms\\.scannerwork");
}};
//使用sonar的分析器来分析代码
//规则从服务器下载
//分析的结果再上传到服务器上去
EmbeddedScanner scanner = EmbeddedScanner.create("sonar", "1.0.0", logOutput);
scanner.addGlobalProperties(sonarPropertiesMap);
scanner.start();
scanner.execute(projectSettingMap);
}
执行mian方法,查看分析结果
到此介绍就结束了,原创不易,谢谢支持。