1、本地开发工具配置快捷运行sonar命令的方法(以idea设置为参考,eclipse设置请自行百度)
idea配置方法:Run-->Edit Configurations-->新增Maven配置
Working directory:填写项目根目录
Command line:填写运行sonar的maven命令,填写如下内容
clean compile -P sonar-test sonar:sonar -Dsonar.projectKey=projectName -Dsonar.host.url=http://sonar.huifutest.com -Dsonar.login=test -Dsonar.password=test
2、某些目录或代码文件需要排除扫描,不进行sonar的代码静态扫描,不进行单元测试覆盖率统计,如何操作?
解决方法:在根目录的pom.xml,
sample:Example.java结尾,dal/entity,dal/mapper,facade目录及其子目录下的java文件,不需要进行代码扫描和单元测试覆盖
注意:下面只是举例的排除sample写法,项目负责人可依据各自项目的需求,调整排除的代码范围。
**/*Example.java,
**/dal/entity/**,
**/dal/mapper/**,
**/facade/**
sonar排除配置的正则表达式说明:
? :匹配单个字符
** :匹配0个或多个文件夹
* :匹配0个或多个字符
3、本地运行后报错,错误提示“BizException{message='远程信息配置错误,无法初始化灰度activemq容器,zkPath:/HF/activemq/198.32.32.40_test/'}”
解决方法:在mvn运行命令后面加上-Dip_port=192.168.16.140,其中192.168.16.140是该应用在测试环境的AMQ地址,如:
mvn clean test -P sonar-test sonar:sonar -Dsonar.projectKey=projectName -Dsonar.host.url=http://sonar.test.com -Dsonar.login=test -Dsonar.password
4、为什么pom中没有添加sonar-maven-plugin插件,项目运行mvn sonar:sonar也能成功?
1)pom中显式声明:
org.sonarsource.scanner.maven
sonar-maven-plugin
3.7.0.1746
2)pom中没有添加插件的
原因:Sonar Maven插件在 Codehaus Mojo project托管,并受益于groupId“org.codehaus.mojo”,这允许使用快捷方式“sonar:sonar”而不是“org.codehaus.mojo:sonar-maven-plugin :: sonar”,所以pom中没有添加sonar-maven-plugin插件,有些项目也可以运行sonarscan成功。
.m2\repository\org\codehaus\mojo\sonar-maven-plugin
maven-metadata-nexus.xml文件中,找到sonar最新版本
.m2\repository\org\sonarsource\scanner\maven\sonar-maven-plugin\3.7.0.1746
5、本地运行sonar的mvn命令后,报错“No plugin found for prefix '.host.url=http' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available for the repositories”
本地运行sonar的mvn命令后,报错如下:
原因:开发修改了默认的.m2的位置,在命令提示符下运行命令时,找不到修改后的本地仓库路径。
解决方法:在开发工具的Terminal窗口运行命令,idea参考下图,eclipse请自行百度。
6、运行sonar报错“The requested profile "sonar-test" could not be activated because it does not exist.”
完整的报错信息如下:
[16S][WARNING] The requested profile "sonar-test" could not be activated because it does not exist.
[16S][ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/app/jenkins/ssd/workspace/qqrc-CI-CD-pipeline). Please verify you invoked Maven from the correct directory. -> [Help 1]
原因:项目代码根目录的pom文件中,没有添加sonar插件;
在代码中增加sonar插件;
操作:在分支的根目录下的pom.xml文件,
注意:
1)如果pom中已经存在
2)拷贝内容放到根目录的pom文件中,不要放到其他模块下的pom文件中。
sonar-test
java
jacoco
3.7.0.1746
0.8.5
target/sonar
reuseReports
${project.basedir}/../target/jacoco.exec
**/*Example.java,
**/dal/entity/**,
**/dal/mapper/**,
**/facade/**
org.sonarsource.scanner.maven
sonar-maven-plugin
${sonar-maven-plugin.version}
org.jacoco
jacoco-maven-plugin
${jacoco-maven-plugin.version}
${sonar.jacoco.reportPaths}
true
prepare-agent
report
7、本地运行sonar命令后,报错“SCM provider autodetection failed. Both svn and git claim to support this project. Please use "sonar.scm.provider" to define SCM of your project”
解决方法:在本地运行的命令后面,增加参数-Dsonar.scm.provider=git 就可以解决该问题。
8、如果sonar扫描出来的问题是误判,或者经过研发团队负责人确认不需要进行修改,可按照如下方式操作
前置条件:使用账户登录sonar控台
操作:选中不需要修改的问题,点击批量修改按钮
在弹出的提示框中,选择"误判"或者"标记为不会修复",添加不修改的原因,再点击应用,该问题就不会再被错误报出,问题数量统计值就会动态减少。