当前位置: 首页 > article >正文

SonarScanner实战:5分钟搞定SpringBoot项目的代码异味检测(含中文补丁配置)

SonarScanner实战5分钟搞定SpringBoot项目的代码异味检测含中文补丁配置引言为什么开发者需要持续代码质量检测在快节奏的敏捷开发环境中代码质量往往成为第一个被牺牲的要素。我曾参与过一个金融系统的重构项目团队在三个月内交付了30万行代码但后续维护成本却高达开发成本的3倍——其中60%的时间都消耗在修复低级代码缺陷上。这正是现代DevOps实践中强调左移测试Shift-Left Testing的核心原因越早发现代码问题修复成本越低。SonarQube作为静态代码分析工具的标杆其独特价值在于多维质量评估不仅检测BUG还覆盖安全漏洞、代码异味、重复代码等7个质量维度技术栈全覆盖支持Java/Kotlin等JVM语言的同时也能分析前端框架代码历史趋势可视化通过技术债务指标量化代码健康度的演进过程本文将聚焦Java开发者最关心的实战场景演示如何将SonarScanner无缝集成到SpringBoot项目的CI/CD流程中。特别包含三个实用技巧中文规则包的加载方法解决英文报告阅读障碍多模块项目的扫描配置诀窍自定义CheckStyle规则的接入方案1. 环境准备最小化SonarQube部署方案1.1 容器化部署Docker Compose方案对于本地开发环境推荐使用官方提供的docker-compose模板快速启动version: 3 services: postgres: image: postgres:13 environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar volumes: - postgres_data:/var/lib/postgresql/data sonarqube: image: sonarqube:9.9-community depends_on: - postgres environment: SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar ports: - 9000:9000 volumes: - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions volumes: postgres_data: sonarqube_data: sonarqube_extensions:关键配置说明参数推荐值作用说明SONAR_JDBC_URLjdbc:postgresql...指定PostgreSQL连接字符串SONAR_JDBC_USERNAMEsonar数据库用户名SONAR_JDBC_PASSWORDsonar数据库密码volumes配置持久化存储防止容器重启后数据丢失注意生产环境部署时务必修改默认密码并配置TLS加密传输1.2 客户端工具链安装在开发机准备扫描工具链# 安装JDK17SonarQube 9.9要求 brew install openjdk17 # 配置Maven插件pom.xml添加 plugin groupIdorg.sonarsource.scanner.maven/groupId artifactIdsonar-maven-plugin/artifactId version3.9.1.2184/version /plugin验证环境就绪mvn sonar:sonar -Dsonar.host.urlhttp://localhost:9000 --version2. SpringBoot项目扫描实战2.1 单模块项目配置典型SpringBoot项目的扫描命令模板mvn clean verify sonar:sonar \ -Dsonar.projectKeymy-springboot-app \ -Dsonar.projectName我的SpringBoot应用 \ -Dsonar.host.urlhttp://localhost:9000 \ -Dsonar.loginsqp_8d933ebca8e428de09f44abd24f9a3e3d02d9a04 \ -Dsonar.java.bin.targettarget/classes关键参数解析sonar.projectKey项目唯一标识建议使用反向域名规范sonar.java.bin.target指定编译后的class文件路径sonar.login项目专属Token通过Web界面生成2.2 多模块项目特殊处理对于包含多个子模块的Maven项目需要在父pom.xml中统一配置properties sonar.host.urlhttp://localhost:9000/sonar.host.url sonar.login${env.SONAR_TOKEN}/sonar.login sonar.projectKeycom.example:parent-pom/sonar.projectKey /properties build pluginManagement plugins plugin groupIdorg.sonarsource.scanner.maven/groupId artifactIdsonar-maven-plugin/artifactId version3.9.1.2184/version /plugin /plugins /pluginManagement /build扫描时需要从父目录执行mvn clean install mvn sonar:sonar -Dsonar.modulesmodule1,module2,module3常见问题解决方案问题现象解决方法子模块未正确识别检查父pom中的modules配置重复代码检测不准确添加-Dsonar.cpd.exclusions参数单元测试覆盖率缺失先执行mvn test生成报告3. 中文规则包与自定义规则3.1 加载中文语言包下载汉化插件兼容9.x版本wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/9.9/sonar-l10n-zh-plugin-9.9.jar放入扩展目录docker cp sonar-l10n-zh-plugin-9.9.jar sonarqube:/opt/sonarqube/extensions/plugins docker restart sonarqube在Admin → Configuration → General设置中切换语言为中文3.2 接入自定义CheckStyle规则通过Quality Profile实现规则定制导出默认Java规则集!-- 通过Admin → Quality Profiles → Export导出XML --集成自定义规则rule keycom.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck/key priorityMAJOR/priority parameters parameter keyignoreNumbers/key value-1,0,1,2/value /parameter /parameters /rule导入并激活新规则集curl -u admin:admin -X POST http://localhost:9000/api/qualityprofiles/restore \ -H Content-Type: multipart/form-data \ -F backupcustom_java_profile.xml4. 进阶技巧历史问题分析与CI集成4.1 建立问题基线对比通过设置项目版本号实现历史对比mvn sonar:sonar \ -Dsonar.projectVersion1.0.0 \ -Dsonar.leak.periodprevious_version分析报告中的关键指标新增问题当前版本引入的缺陷修复问题已解决的旧问题技术债务以分钟为单位的预估修复时间4.2 GitLab CI集成示例.gitlab-ci.yml配置模板stages: - test - sonar sonarqube: stage: sonar image: maven:3.8.6-openjdk-17 variables: SONAR_USER_HOME: ${CI_PROJECT_DIR}/.sonar script: - mvn clean verify - mvn sonar:sonar -Dsonar.host.url${SONARQUBE_URL} -Dsonar.login${SONARQUBE_TOKEN} rules: - if: $CI_COMMIT_BRANCH main提示在CI变量中存储敏感凭证避免硬编码在配置文件中实际项目中我们发现将Sonar扫描作为Merge Request的准入条件后代码审查效率提升了40%。一个典型的成功案例是在300次提交中提前拦截了87个潜在生产缺陷包括15个安全漏洞。

相关文章:

SonarScanner实战:5分钟搞定SpringBoot项目的代码异味检测(含中文补丁配置)

SonarScanner实战:5分钟搞定SpringBoot项目的代码异味检测(含中文补丁配置) 引言:为什么开发者需要持续代码质量检测? 在快节奏的敏捷开发环境中,代码质量往往成为第一个被牺牲的要素。我曾参与过一个金融系…...

大模型:Agent(智能代理)

一、环境 在此之前我们需要确定一下环境,网盘分享的是我们第三方库的配置环境。 requirements3.txt 链接: https://pan.baidu.com/s/1FjHEmBK6Pz4XS4aN3Ak76g 提取码: 89yt 这里我使用的是python3.11,python版本不能太老,否则很多库会不兼…...

基于ThinkPHP框架的外卖点餐系统设计与实现

目录 可选框架 可选语言 内容 可选框架 J2EE、MVC、vue3、spring、springmvc、mybatis、SSH、SpringBoot、SSM、django 可选语言 java、web、PHP、asp.net、javaweb、C#、python、 HTML5、jsp、ajax、vue3 内容 随着移动互联网信息技术高速发展,许多上班族、…...

基于Simulink的极点配置法优化Buck动态响应​

目录 手把手教你学Simulink——基于Simulink的极点配置法优化Buck动态响应​ 摘要​ 一、背景与挑战​ 1.1 Buck变换器动态响应的核心需求与传统PID局限​...

CEO必会之创建公司文化

CEO必会之创建公司文化 CEO必会之建立公司文化:把墙上标语,变成员工骨子里的信仰 课程导语 话术升级: 各位好,今天我们来聊一个CEO最容易忽视、但也最决定企业高度的课题:建立公司文化。 很多人觉得文化是虚的——墙上…...

MedGemma Medical Vision Lab高算力适配:异步I/O+零拷贝内存映射加速大影像加载

MedGemma Medical Vision Lab高算力适配:异步I/O零拷贝内存映射加速大影像加载 1. 引言:医学影像加载的性能挑战 医学影像分析系统面临着一个核心的技术难题:如何高效处理大型医学影像文件。一张普通的CT或MRI影像可能达到数百MB甚至GB级别…...

Get-cookies.txt-LOCALLY:终极本地Cookie导出工具完整指南

Get-cookies.txt-LOCALLY:终极本地Cookie导出工具完整指南 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在网络安全日益重要的今天&a…...

微信小程序-滑动拼图安全验证

滑动拼图验证组件1. 前提介绍2. 最终实现效果图3. 封装验证组件并使用1.编写组件2.引入并使用4. 总结1. 前提介绍 本项目是应用taro框架,使用Canvas 画布组件微信开发文档,来实现的 (注:此组件目前是纯前端校验,没涉及…...

Kimi-VL-A3B-Thinking快速上手:不写代码,用Web界面完成图文推理全流程

Kimi-VL-A3B-Thinking快速上手:不写代码,用Web界面完成图文推理全流程 你是不是经常遇到这样的场景:拿到一张复杂的图表,想快速提取里面的关键信息;或者看到一张产品图,想知道它的具体参数和特点&#xff…...

从Bezier到NURBS:Halcon中样条曲线拟合的技术演进与选型建议

从Bezier到NURBS:Halcon中样条曲线拟合的技术演进与选型建议 在工业视觉检测领域,曲线拟合算法的选择直接影响着测量精度和系统稳定性。Halcon作为计算机视觉领域的标杆工具,其曲线拟合技术经历了从简单多项式到NURBS(非均匀有理B…...

ruoyi-vue-pro ERP系统实战:5分钟搞定采购模块数据库设计与业务逻辑

Ruoyi-Vue-Pro ERP采购模块实战:从数据库设计到业务联调全解析 上个月接手一个制造业客户的ERP系统改造项目时,他们的采购主管抱怨现有系统存在三个致命问题:供应商信息混乱导致比价困难、采购订单与入库单脱节造成对账耗时、库存更新延迟引发…...

AI|大模型数学能力评估实战

1. 大模型数学能力评估的意义 评估大模型的数学能力,本质上是在测试它的逻辑思维和计算精度。这就像给一个学生做数学考试,不仅要看他能不能算出正确答案,还要观察他的解题思路是否清晰、步骤是否合理。在实际应用中,大模型的数学…...

Miniconda-Python3.10镜像效果展示:一键创建多个独立Python环境

Miniconda-Python3.10镜像效果展示:一键创建多个独立Python环境 1. 为什么需要独立的Python环境 在Python开发中,我们经常会遇到这样的困扰:不同项目依赖的库版本不同,导致冲突和兼容性问题。比如: 项目A需要Tensor…...

EfficientNet解析:复合缩放如何重塑轻量级网络性能

1. 从MobileNet到EfficientNet的进化之路 2017年,当Google首次推出MobileNet时,整个计算机视觉领域都为之一振。这个专为移动端设计的轻量级网络,用深度可分离卷积(Depthwise Separable Convolution)取代传统卷积&…...

Meshlab实用操作指南:从STL处理到点云化

1. Meshlab入门:为什么选择它处理STL文件? 如果你经常接触3D模型,尤其是工业设计、逆向工程或者3D打印领域,STL格式的文件对你来说一定不陌生。这种三角网格文件格式简单通用,但直接处理起来却不太方便——这时候Meshl…...

天问语音模块LU-ASR PRO语音替换全攻略:从MP3转换到一键烧录

天问语音模块LU-ASR PRO语音替换全攻略:从MP3转换到一键烧录 在智能硬件开发中,语音交互功能正变得越来越普及。天问语音模块LU-ASR PRO作为一款性能优异的语音识别模块,被广泛应用于各类智能设备中。本文将详细介绍如何对模块中的默认语音进…...

Android预装APK的V2签名失效问题分析与解决策略

1. 为什么V2签名在预装时会失效? 这个问题困扰过不少Android开发者。我去年在给某智能手表项目预装系统应用时就踩过这个坑,当时GTS测试总是报签名错误,折腾了一周才发现是预装方式的问题。先说说V2签名的特点:它会对整个APK文件进…...

岚图上市:成央国企高端新能源汽车第一股 武汉从造车向造链升级

雷递网 雷建平 3月19日岚图汽车(07489.HK)今日在港交所上市,成为“央国企高端新能源汽车第一股”。岚图汽车也成为继蔚小理、零跑汽车、奇瑞汽车之后,港股市场迎来的又一股重要的新能源造车力量。放眼全局,岚图也是华中…...

百度富文本编辑器在国产化信创环境中如何处理PPT导入?

教育网站CMS系统Word导入功能开发实录——C#程序员视角 一、需求拆解与前期调研 作为独立外包开发者,我首先与教育机构的产品经理进行了3次需求对齐会议,明确核心痛点: 教师群体:需将备课文档(含公式、表格、教学图…...

TSP求解器大比拼:Concorde vs LKH,哪个更适合你的项目?

TSP求解器深度评测:Concorde与LKH的核心差异与工程实践指南 当面对物流路径规划、芯片布线或无人机巡检路线优化等实际工程问题时,旅行商问题(TSP)的求解效率直接关系到业务成本。本文将带您深入两个业界标杆求解器——Concorde与…...

网页版百度UM编辑器能否跨平台粘贴Excel表格数据?

Word图片一键转存功能开发全记录 技术调研与选型 作为项目前端负责人,我近期专注于解决Word文档粘贴到UEditor时图片自动转存的问题。经过对同类方案的对比分析,确定以下技术路线: 前端技术栈 Vue2.6.14 UEditor 1.4.3Axios 0.21.1&…...

REST API的隐性成本有多高?——基于百万QPS压测的带宽、GC、内存占用三维对比报告

第一章:REST API的隐性成本有多高?——基于百万QPS压测的带宽、GC、内存占用三维对比报告在真实高并发场景下,REST API 的表层简洁性常掩盖其底层资源开销。我们对三类典型服务(Go net/http、Spring Boot WebMvc、Node.js Express…...

LlamaFirewall大模型防火墙框架:构建安全AI代理的开源护栏系统

1. LlamaFirewall框架的核心价值与应用场景 当大模型技术逐渐渗透到各行各业时,安全问题就像悬在头顶的达摩克利斯之剑。我去年参与过一个金融领域的AI客服项目,上线第三天就遭遇了精心设计的提示词注入攻击——攻击者用看似普通的用户提问,成…...

嵌入式开发实战:SPI回环测试完整流程与常见问题排查(基于Linux内核)

嵌入式Linux SPI回环测试全流程解析:从原理到实战 在嵌入式系统开发中,SPI(Serial Peripheral Interface)总线因其高速、全双工的特性,成为连接传感器、存储设备和显示模块的首选方案。而回环测试作为验证SPI通信可靠性…...

ARM架构下Python连接PostgreSQL的坑:手把手解决Aarch64安装psycopg2-binary的依赖问题

ARM架构下Python连接PostgreSQL的深度解决方案:Aarch64平台psycopg2-binary依赖问题全解析 在边缘计算和物联网设备快速普及的今天,ARM架构处理器凭借其低功耗、高性能的特性,正成为许多应用场景的首选。然而,当Python开发者尝试在…...

为什么93%的MCP项目在上线3个月后成本翻倍?揭秘本地数据库连接器的3层“幽灵开销”与零代码修复方案

第一章:MCP服务器本地数据库连接器成本失控的真相MCP(Microservice Coordination Platform)服务器在部署本地数据库连接器时,常因连接池配置失当、连接泄漏与无感知重连机制导致资源持续占用,最终引发云资源账单异常飙…...

别再死记HashMap了!多线程死循环、数据丢失,这些坑90%的人都踩过

面试时被问HashMap,你是不是也这样? “底层是数组链表,JDK1.8加了红黑树,扩容阈值是容量负载因子……”背得滚瓜烂熟,却被面试官追问一句“多线程下为什么会死循环”,瞬间卡壳。 更扎心的是:工作…...

风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景

风电光伏的场景生成与消减-matlab代码 可利用蒙特卡洛模拟或者拉丁超立方生成光伏和风电出力场景,并采用快速前推法或同步回代消除法进行削减,可以对生成场景数和削减数据进行修改,下图展示的为1000个场景削减至10个典型场景,并获…...

[Hello-CTF]RCE-labs靶场:从零到一的Docker化实战指南

1. 为什么你需要一个本地化的RCE靶场 作为一个刚接触CTF的新手,我最初在练习远程代码执行(RCE)漏洞时总是束手束脚——要么找不到合适的在线靶场,要么好不容易找到的靶场环境不稳定。直到后来发现用Docker搭建本地靶场这个方案&am…...

图像匹配避坑指南:NCC算法在工业检测中的实战应用

工业视觉实战:NCC算法在缺陷检测中的高阶应用与调优策略 工业生产线上的视觉检测系统正面临前所未有的挑战——每分钟处理上千件产品的同时,还要确保缺陷识别准确率超过99.9%。在这个追求极致效率与精度的领域,归一化互相关(NCC)算法以其独特…...