Java教程

Java集成SonarQube

本文主要是介绍Java集成SonarQube,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java工程集成SonarQube

针对目前Java工程集成SonarQube,主要有两种方式。一种是在Java工程自身是Maven工程的情况下,可直接使用Maven中的sonar插件,快速完成对接。如果不是Maven工程或者工程无法用sonar插件完成分析,那么可以使用Sonar Scanner来完成对接。下面将对两种对接方式进行详细介绍:

准备工作

向SonarQube管理员申请用户账号和对应的token,后续的登录SonarQube系统和执行代码扫描都会用到账号和token。

Maven sonar 插件

  1. 切换工作目录到工程的pom.xml文件所在目录,后续的Maven命令都是在该目录下执行。

  2. 首先进行工程的清理。

    mvn clean
  3. 对项目进行编译。

    mvn compile
  4. 对项目执行测试用例(测试用例例如UT,如果不存在测试用例,该步可以跳过)。

    mvn test jacoco:report -Dmaven.test.failure.ignore=true

    jacoco:report 表示在执行测试的过程中生成jacoco覆盖率报告,如果工程未集成jacoco,可以跳过。

    -Dmaven.test.failure.ignore=true 表示在执行测试用例过程,忽略失败的用例,如果去掉这个参数,表示不忽略,那么当有测试用例失败时,该步将会执行失败。

  5. 对项目进行sonar扫描并上传报告。

    mvn sonar:sonar -Dsonar.host.url={SonarQube服务地址} -Dsonar.login={token} -Dsonar.branch.name={当前分支}

    -Dsonar.branch.name={当前分支} 这个参数不是必须的,如果不加这个参数,那么分支默认为master。

Sonar scanner

Sonar scanner适合于非Maven工程或者无法使用Maven sonar插件进行扫描的工程(例如无父工程存在的多模块工程),但是Sonar scanner需要配置很多配置项,使用起来会比Maven sonar插件的方式略微繁琐一些。

  1. 首先参考SonarScanner | SonarQube Docs进行Sonar scanner的安装。

  2. 执行“Maven sonar 插件”章节中的1到4步。

  3. 执行Sonar scanner来扫描代码并上传报告。

    {Sonar scanner安装路径}/sonar-scanner -Dsonar.host.url={SonarQube服务地址} -Dsonar.login={token} -Dsonar.branch.name={当前分支} -Dsonar.projectKey={projectKey} -Dsonar.coverage.jacoco.xmlReportPaths={jacocoReportPaths} -Dsonar.java.binaries={javaBinaries} -Dsonar.java.test.binaries={javaTestBinaries} -Dsonar.java.libraries={javaLibraries} -Dsonar.java.test.libraries={javaTestLibraries} -Dsonar.tests={javaTests} -Dsonar.sources={javaSources}

    -Dsonar.projectKey={projectKey} 表示当前工程的唯一标识。

    -Dsonar.sources={javaSources} 表示源码的路径,多个目录可以用逗号分隔。

    -Dsonar.java.binaries={javaBinaries} 表示源码编译后class文件所在的目录,多个目录可以用逗号分隔。

    -Dsonar.java.libraries={javaLibraries} 表示工程依赖的jar包所在的目录,多个目录可以用逗号分隔。

    -Dsonar.coverage.jacoco.xmlReportPaths={jacocoReportPaths} 表示jacoco xml报告所在文件路径,多个文件路径可以用逗号分隔,非必传,存在jacoco时传递该参数即可。

    -Dsonar.tests={javaTests} 表示测试代码的路径,多个目录可以用逗号分隔,非必传,存在测试代码时传递该参数即可。

    -Dsonar.java.test.binaries={javaTestBinaries} 表示测试代码编译后class文件所在的目录,多个目录可以用逗号分隔,非必传,存在测试代码时传递该参数即可。

    -Dsonar.java.test.libraries={javaTestLibraries} 表示测试代码依赖的jar包所在的目录,多个目录可以用逗号分隔,非必传,存在测试代码时传递该参数即可。

这篇关于Java集成SonarQube的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!