Sonar修复笔记
在软件开发过程中,代码质量管理是至关重要的一环。SonarQube作为一个广泛使用的代码质量管理工具,能够帮助团队发现并改进代码中的问题。
需要注意:不同版本的SonarQube可能会应用不同的规则,导致扫描报告的差异。
# 1、Maven命令执行SonarQube扫描
首先,在Maven项目中配置SonarQube插件, 修改pom.xml文件
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.6.0.1398</version>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- sonar平台地址 如:http://localhost:9000 以及登录的账号密码 -->
<sonar.host.url>http://localhost:9000</sonar.host.url>
<sonar.login>admin</sonar.login>
<sonar.password>123456</sonar.password>
</properties>
</profile>
</profiles>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
然后使用以下Maven命令执行SonarQube代码扫描:
mvn sonar:sonar
1
这条命令会触发SonarQube插件扫描项目代码,将分析结果上传至SonarQube服务器。
扫描完成后登录SonarQube查看报告结果。
# 2、一些规则修复技巧
# 2.1 规则"S6857"
Sonar warning S6857: Correct this malformed property placeholder
public class TestConfiguration {
@Value("${anyValue:}")
private String anyString;
}
1
2
3
4
2
3
4
Sonar就认为Value里面给了默认值后SpEL表达式格式不正确,其实代码逻辑是没问题的表示 如果 anyValue 为空,则设置为空字符串。
这问题其实可不改 官网Jira也提了bug,SONARJAVA-4917
Sonar社区讨论:S6857
实在要修复的话 可以改为:
public class TestConfiguration {
@Value("${anyValue:#{''}}")
private String anyString;
}
1
2
3
4
2
3
4
# 3、屏蔽不需要修复的规则
对于那些SonarQube报告中有些规则不想修复可以通过在代码中使用@SuppressWarnings注解来屏蔽这些规则。
@SuppressWarnings("all")
public void someMethod() {
// Code here
}
1
2
3
4
2
3
4
记住,在屏蔽规则时要小心谨慎,确保规则的屏蔽是合理且有充分理由的。
以下是@SuppressWarnings 注解中可用的有效警告名称列表:
- all: 这是一种禁止所有警告的通配符
- boxing: 抑制与装箱/拆箱操作相关的警告
- unused: 禁止未使用代码的警告
- cast: 抑制与对象转换操作相关的警告
- deprecation: 抑制与弃用相关的警告,例如弃用的类或方法
- restriction: 抑制与使用不鼓励或禁止引用有关的警告
- dep-ann: 抑制与弃用注释相关的警告
- fallthrough: 抑制与switch语句中缺少break语句
- finally: 抑制与finally块相关的警告,这些块不会返回
- hiding: 抑制与隐藏变量的本地人相关的警告
- incomplete-switch: 抑制与switch语句中缺失条目相关的警告*(枚举*情况)
- nls: 抑制与非 nls 字符串文字相关的警告
- null: 禁止与null分析
- serial: 抑制与缺少的serialVersionUID字段相关的警告,该字段通常在Serializable类
- static-access: 抑制与不正确的静态变量访问相关的警告
- synthetic-access: 抑制与来自内部类的未优化访问相关的警告
- unchecked: 禁止与未经检查的操作相关的警告
- unqualified-field-access: 抑制与不合格字段访问相关的警告
- javadoc:抑制与 Javadoc 相关的警告
- rawtypes: 抑制与使用原始类型相关的警告
- resource: 禁止与使用Closeable
- super: 超级调用 的情况下覆盖方法相关的警告
- sync-override: 在覆盖同步方法 抑制由于缺少同步
# 4、SonarQube API的调用方式
SonarQube提供了强大的API,可以通过编程方式调用。通过调用SonarQube API,你可以实现自动化代码扫描、规则管理和报告生成等操作,从而更好地集成SonarQube到你的开发流程中。
手动上传报告请求示例:
curl --request POST \
--url 'http://localhost:9000/api/ce/submit?projectKey=projectKey' \
--header 'Accept: */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: Basic c3F1X2M0OGQyNTg4MzQ1MzBlOTVmYThkODUyNGU1NmJhZWRkNzNiZmFkZjI6' \
--header 'Connection: keep-alive' \
--header 'Content-Type: multipart/form-data' \
--header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0' \
--form 'report ='
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Authorization为SonarQube-安全-生成的令牌
上次更新: 2024/08/30, 18:53:08