一、概述
配置好sonar的服务端后,接下来就要使用sonar检测我们的代码了,sonar主要是借助客户端检测工具来检测代码,所以要使用sonar就需要先在我们本地配置好客户端检测工具。
客户端可以通过IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式进行扫描分析。常用的有扫描器有Sonar-Scanner和Sonar-Runner,使用起来都差不多。这里我使用Sonar-Scanner来作为检测客户端。
二、安装sonar-scanner
下载sonar-scanner
地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
安装sonar-scanner
1)确保安装jdk
# javac -version
javac 11.0.14
2)解压
unzip sonar-scanner-cli-4.7.0.2747-linux.zip
3)配置环境变量,修改文件 /etc/profile
SONAR_SCANNER_HOME=/root/sonar-scanner-4.7.0.2747-linux
export PATH=${SONAR_SCANNER_HOME}/bin:$PATH
环境变量生效
# source /etc/profile
4)验证安装
# sonar-scanner -v
5)配置sonar-scanner
编辑
vi /root/sonar-scanner-4.7.0.2747-linux/conf/sonar-scanner.properties
修改sonar.host.url=http://localhost:9000
三、分析项目
新建配置文件
在java项目下,新建 sonar-project.properties 文件,添加以下内容
# must be unique in a given SonarQube instance
sonar.projectKey=my:container
# --- optional properties ---
# defaults to project key
#sonar.projectName=My project
sonar.projectName=container
# defaults to 'not provided'
#sonar.projectVersion=1.0
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
#sonar.sources=.
sonar.sources=src
sonar.java.binaries=target/classes
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
参考参数说明:
#key,唯一标识,直接用项目名即可
sonar.projectKey=项目名
sonar.projectName=项目名
sonar.projectVersion=1.0
#要扫描的代码路径,sonar-project.properties文件的相对路径。【配成.或src】
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.language=java
分析项目
在java项目目录下执行以下命令
# sonar-scanner
报错1:
ERROR: Error during SonarScanner execution
ERROR: Not authorized. Analyzing this project requires authentication. Please provide a user token in sonar.login or other credentials in sonar.login and sonar.password.
解决1:
因为在配置文件中缺乏sonar.login和sonar.password参数,配置后即可
# vi /root/sonar-scanner-4.7.0.2747-linux/conf/sonar-scanner.properties
添加
sonar.login=xxxx
sonar.password=xxxx
报错2:
INFO: JavaClasspath initialization
ERROR: Invalid value for 'sonar.java.binaries' property.
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 10.946s
INFO: Final Memory: 15M/176M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarScanner execution
java.lang.IllegalStateException: No files nor directories matching 'target/classes'
at org.sonar.java.classpath.AbstractClasspath.getFilesFromProperty(AbstractClasspath.java:128)
at org.sonar.java.classpath.ClasspathForMain.init(ClasspathForMain.java:58)
at org.sonar.java.classpath.AbstractClasspath.getElements(AbstractClasspath.java:319)
解决2:
因为在配置文件中sonar.java.binaries参数配置的值不正确,创建相应的目录即可。
在target目录下创建classes目录
# mkdir target/classes
报错3:
使用sonar-scan做代码扫描时失败,错误信息如下
sonar报错:java.lang.IllegalStateException: Unrecoverable indexation failures: 1 errors among 1 request
解决3:
很明显是sonarqube的问题,查看sonarqube服务无异常,没有问题。
根据提示,检查es的日志
发现是因为es的问题,占用了磁盘空间,导致空间不够,所以出了问题。
释放服务器空间,重新执行扫描任务,任务正常执行。
成功后打开sonarqube,查看报告
参考链接:
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/