sonar常见问题和解决方法

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

注意:projectName要替换为应用名称sonar常见问题和解决方法_第1张图片

选择sonar-hoc,点击运行,即可运行sonar命令

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也能成功?

  • pom中显式声明sonar-maven-plugin插件的,会按照pom中指定的版本进行代码静态扫描;
  • pom中没有添加插件的,org.codehaus.mojo会自动下载sonar-maven-plugin,找到最新的版本3.7.0.1746,再自动下载最新的版本3.7.0.1746到本地,用最新的版本做代码静态扫描;

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-pluginsonar常见问题和解决方法_第2张图片

maven-metadata-nexus.xml文件中,找到sonar最新版本

sonar常见问题和解决方法_第3张图片

.m2\repository\org\sonarsource\scanner\maven\sonar-maven-plugin\3.7.0.1746

自动下载最新版本到本地,用最新版本运行代码静态扫描sonar常见问题和解决方法_第4张图片

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命令后,报错如下:

sonar常见问题和解决方法_第5张图片

 原因:开发修改了默认的.m2的位置,在命令提示符下运行命令时,找不到修改后的本地仓库路径。

解决方法:在开发工具的Terminal窗口运行命令,idea参考下图,eclipse请自行百度。

sonar常见问题和解决方法_第6张图片

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控台

操作:选中不需要修改的问题,点击批量修改按钮

sonar常见问题和解决方法_第7张图片

在弹出的提示框中,选择"误判"或者"标记为不会修复",添加不修改的原因,再点击应用,该问题就不会再被错误报出,问题数量统计值就会动态减少。

sonar常见问题和解决方法_第8张图片

你可能感兴趣的:(sonar代码扫描,maven,java)