互联网技术社区|福缘小草|程序员技术博客
🏠首页
  • 开发必备
  • Java
  • Spring Boot
  • MyBatis
  • C#
  • 架构
  • 算法
  • Vue
  • JavaScript
  • HTML
  • MySQL
  • Oracle
  • SQL Server
  • PostgreSQL
  • Redis
  • MongoDB
  • ElasticSearch
  • influxDB
  • ClickHouse
  • Linux
  • Docker
  • K8s
  • 消息队列
  • Shell
  • Git
  • Nginx
  • IDEA
  • Windows
  • 安卓
  • 在线工具
  • 实用技巧
  • 开源项目
  • 好文
  • 资源
  • 网站
  • 导航
💖关于
  • 分类
  • 标签
  • 归档

baohua.yin

不会填坑的程序员不是一个好程序猿!
🏠首页
  • 开发必备
  • Java
  • Spring Boot
  • MyBatis
  • C#
  • 架构
  • 算法
  • Vue
  • JavaScript
  • HTML
  • MySQL
  • Oracle
  • SQL Server
  • PostgreSQL
  • Redis
  • MongoDB
  • ElasticSearch
  • influxDB
  • ClickHouse
  • Linux
  • Docker
  • K8s
  • 消息队列
  • Shell
  • Git
  • Nginx
  • IDEA
  • Windows
  • 安卓
  • 在线工具
  • 实用技巧
  • 开源项目
  • 好文
  • 资源
  • 网站
  • 导航
💖关于
  • 分类
  • 标签
  • 归档
  • 提取和删除照片图片 Exif GPS 等隐私信息
  • Java调用CMD(Dos)命令
  • MultipartFile与File互转&inputStream转File
  • Alibaba Java 技术图谱
  • Java传给前端的Long类型字段要转为String类型
  • Java根据出生日期获取年龄
  • Java利用Hutool对身份证操作
  • java测试造数据神器JavaFaker
  • Sonar修复笔记
    • Java
    baohua.yin
    2024-01-08
    目录

    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

    然后使用以下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

    Sonar就认为Value里面给了默认值后SpEL表达式格式不正确,其实代码逻辑是没问题的表示 如果 anyValue 为空,则设置为空字符串。

    这问题其实可不改 官网Jira也提了bug,SONARJAVA-4917

    Sonar社区讨论:S6857

    实在要修复的话 可以改为:

    public class TestConfiguration {
        @Value("${anyValue:#{''}}")
        private String anyString;
    }
    
    1
    2
    3
    4

    # 3、屏蔽不需要修复的规则

    对于那些SonarQube报告中有些规则不想修复可以通过在代码中使用@SuppressWarnings注解来屏蔽这些规则。

    @SuppressWarnings("all") 
    public void someMethod() {
        // Code here
    }
    
    1
    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

    Authorization为SonarQube-安全-生成的令牌

    上次更新: 2024/08/30, 18:53:08
    java测试造数据神器JavaFaker

    ← java测试造数据神器JavaFaker

    最近更新
    01
    如何进行科学上网
    05-31
    02
    分享(一个外地女孩,死在了我出租的公寓)
    08-18
    03
    温家宝总理—《我的母亲》
    06-13
    更多文章>
    Copyright © 2019-2025 1024fuli.com | 本站所有资源收集整理于网络,如有侵权请发邮件联系删除。| 粤ICP备18082936号-1 | 由又拍云提供CDN支持
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式