一、概述

配置好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/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐