Maven整合Sonar进行代码审查
项目中使用到了Sonar代码扫描,现记录整合过程以及遇到的问题如下(需要说明的是本文只记录整合时的步骤,并不包括Sonar安装过程):
1.利用sonar生成token
本步骤主要是为了生成后续Maven中需要配置的认证信息,如果已生成过token,可以直接跳过此步骤。
1.1登录sonar并进入我的账号
1.2进入安全页面
1.3输入令牌名称生成令牌
1.4将token复制并保存下来
2.配置Maven项目中的POM文件
2.1在父POM文件中的<plugins>标签中加入sonar插件
加入代码如下:
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.0.2155</version>
</plugin>
2.2在父POM文件中的<properties>标签中加入sonar地址和token令牌配置
<!-- SonarQube服务器地址-->
<sonar.host.url>sonar服务器地址</sonar.host.url>
<!-- 访问令牌或⽤户名密码 -->
<sonar.login>对应token</sonar.login>
3.运行Maven命令
3.1正常情况下运行命令
如果你是用的命令行执行下面命令,而不是和我一样,直接使用IDEA的Terminal,那么以下命令是可以正常执行的:
mvn clean verify sonar:sonar -Dmaven.test.skip=true
其中-Dmaven.test.skip=true
代表跳过单元测试并且不编译测试用例类,也有人会使用mvn clean verify sonar:sonar -DskipTests
,其中-DskipTests
代表不执行单元测试但编译测试用例类生成相应的class文件至target/test-classes下,由于我所在的项目规模较大,没必要每次编译后都进行单元测试,所以使用的是前一种方案。
如果使用的是IDEA的Terminal,那么由于Terminal打开的是PowerShell窗口,你应该会遇到下面的错误:
所以请执行以下命令用以替代:
mvn clean verify sonar:sonar --% -Dmaven.test.skip=true
3.2命令执行完成后查看扫描结果
如果你看到以下信息,则说明扫描成功(可以看到项目是比较大的,运行上面的命令花费了24分钟):
如果想要查看Sonar报告,请向上翻滚命令行,找到如下页面:
点击第一个链接,即可进入Sonar报告页面
4.遇到的问题
4.1本机装有多个不同版本的Maven,在IDEA里面设置了项目使用的Maven,但在Terminal里面执行命令的却是另一个不同版本的Maven
该问题是由于我在系统变量里面配置的默认Maven是第二个Maven,但在项目里使用的是第一个Maven。在Terminal以及命令行里面使用的是默认Maven,也就是第二个Maven。这个问题导致我无论怎么修改第一个Maven的setting文件,执行mvn clean verify sonar:sonar --% -Dmaven.test.skip=true
命令下载第三方依赖时总是使用的默认Maven的setting文件,导致下载失败。