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文件,导致下载失败。

4.2Maven总是尝试从
posted @ 2024-04-09 17:12  bleuIL  阅读(447)  评论(1编辑  收藏  举报