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

代码质量管理平台实战| SonarQube 安装、配置及 JaCoCo、Maven 集成


SonarQube 是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube。此外, SonarQube 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
官方网址:Clean Code | Developer First | Sonar
通过插件形式,可以支持包括 Java,C#,C/C++、PL/SQL、Cobol、JavaScrip、Groovy、Ruby 等二十五种编程语言的代码质量管理与检测,针对不同的编程语言其所提供的分析方式也有所不同:对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能;对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能。
SonarQube 支持多种客户端集成方式,包括但不限于 Scanner 客户端、Ant、Gradle、Maven、Jenkins、IDEA 插件等。比较常用的为 Gradle 和 Maven。
SonarQube 并不是简单地将各种质量或覆盖率检测工具的结果(例如 CheckStyle、JaCoCo 等)直接展现给客户,而是通过不同的插件算法来对结果进行再加工,并最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理,以便进行有针对性的代码修复或重构。
SonarQube 在进行代码质量管理时,会从以下的七个纬度对项目代码质量进行分析。
Sonar 实际上是一个 Web 系统,展现了静态代码扫描的结果,结果是可以自定义的,而真正实现代码扫描的是 Sonar Scanner 这个工具,另外同时支持多种语言的原理是它的扩展性,通过插件实现的,也就是 Java Jar 架包,可以在 Sonar 平台上在线安装或者离线安装。
1.已安装 JDK1.8 环境
2.已安装 Maven(用于后期与 SonarQube、JaCoCo 的集成)
3.已安装 MySQ L数据库(Sonar 默认的数据库是自带 H2 数据库,是很小的嵌入式数据库引擎,这里的配置换成了 MySQL,为了方便通过数据库客户端进行数据查询)
1.下载 SonarQube,地址为:
Download | SonarQube 1
2.配置数据库(下面的SQL是指定了schema为sonar,password为sonar,其中第四条SQL是localhost是因为MySQL安装在本地)
3.安装 SonarQube
I. 将下载的 sonar-3.7.zip 包解压至 Windows某个路径,如 D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)。
II. 修改 sonar.properties
在 /conf/sonar.properties 文件中,配置数据库设置(默认已经提供了各类数据库的支持这里使用 MySQL,因此取消 MySQL 模块的注释),同时因为端口冲突而改成端口为 11000。
III.在 /bin/ 目录下,运行 /windows-x86-64/StartSonar.bat (因为本 demo 是在 win10 64位安装的,如果是 Linux 的话,运行 nohup bash sonar.sh start &)
IV. 访问 http://localhost:11000,如果不是本机就输入 http://[remote IP]:11000,如果你看到下图所示即证明配置成功。
4.用 admin/admin(默认)进行登录,并安装汉化包
Chinese pack installation
Chinese pack restart
Chinese pack restart confirm
Well done!

  1. 下载Sonar Scanner,地址为:
    https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
  2. 将下载的 sonar-scanner-cli-3.3.0.1492-windows.zip 包解压至 Windows 某个路径,如D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)
  3. 修改环境变量
    新增变量:
    SONAR_SCANNER_HOME = D:\Tools\sonar\sonar-scanner-3.3.0
    修改Path变量:增添
    %SONAR_SCANNER_HOME%\bin\
  4. 安装Sonar Scanner
    I. 将下载的 sonar-3.7.zip 包解压至 Windows 某个路径,如 D:\Tools\sonar(如是其他 OS,请选择对应路径,如 Linux的/usr/local/ 等)。
    II. 修改 sonnar-scanner.properties
    在 /conf/sonar-scanner.properties 文件中,设置SonarQube服务器。
    III. 到你想检测的工程根目录下新建文件sonar-project.properties,文件内容如下?,文件中的参数配置,参考Sonar Analysis Parameters这篇文章。
    在命令行模式下,在工程的根目录下键入命令“sonar-scanner”,你会看到以下日志:
    运行 sonar-scanner
    接着,重新登录 SonarQube 平台,检测的结果已经在平台上展现出来
    从上图你可以看出来,连单元测试覆盖率的统计也生成出来了,主要原因为在该maven项目之前已经集成了Jacoco插件(具体Maven与Jacoco的集成请参考我的另外一篇文章)。
    1.该项目为maven项目,并且Jacoco已经通过POM文件集成到项目中,具体步骤请参考我的另外一篇文章。
    2.该集成方案其实还是首先通过maven package 命令去生成对应的覆盖率报告,然后通过sonar scanner直接使用该覆盖率报告并通过一定算法加工并展示到SonarQube的界面上去。
    1.在项目根目录的 sonar-project.properties 文件中,增添以下配置内容:
    2.在 SoarQube 登录 admin,并通过在【配置-应用市场】下找到Jacoco插件并安装和重启。
  5. 在项目根目录下,运行 mvn package,当build成功的时候Jacoco的结果就会产生在target/site/jacoco文件夹下。
    maven package
  6. 接着,在项目根目录下运行命令 sonar-scanner,如果看到以下结果证明已经覆盖率已经可以在SonarQube上查阅。
    sonar scanner
    以上,后续继续补充如何通过 SonarLint 整合到 IntelliJ IDEA,并同时如何整合到 Jenkins 实现自动化测试。

 

相关文章:

  • 黑马Hive+Spark离线数仓工业项目--数仓事实层DWB层构建(2)
  • VIAVI唯亚威光纤高分辨率多模 OTDR 测试方案
  • rust program英文和汉语混合笔记(4)
  • Attention:何为注意力机制?
  • 高级网络复习——防火墙,OSPF协议,rip协议,三层,DHCP中继知识题解(带答案)
  • 【BF算法】
  • 多线程与高并发(三)
  • 【Spring(二)】IoC入门案例(XML版)
  • 剑指offer----C语言版----第一天
  • 量子计算(十八):量子计算机
  • c语言操作符(上)
  • 计算机基础知识(基础入门小白专属)五
  • Python实现模拟退火算法
  • 失业之后,我都干了啥
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Laravel Mix运行时关于es2015报错解决方案
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring核心 Bean的高级装配
  • Theano - 导数
  • Vue.js 移动端适配之 vw 解决方案
  • VuePress 静态网站生成
  • 关于extract.autodesk.io的一些说明
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 你不可错过的前端面试题(一)
  • 如何用vue打造一个移动端音乐播放器
  • 深度解析利用ES6进行Promise封装总结
  • 双管齐下,VMware的容器新战略
  • 追踪解析 FutureTask 源码
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • (16)Reactor的测试——响应式Spring的道法术器
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (函数)颠倒字符串顺序(C语言)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)JAVA中的堆栈
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)scrum常见工具列表
  • (转)大型网站的系统架构
  • ***详解账号泄露:全球约1亿用户已泄露
  • .NET C# 使用GDAL读取FileGDB要素类
  • .stream().map与.stream().flatMap的使用
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • :“Failed to access IIS metabase”解决方法
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @PreAuthorize与@Secured注解的区别是什么?
  • @RestController注解的使用
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [Algorithm][动态规划][01背包问题][目标和][最后一块石头的重量Ⅱ]详细讲解
  • [Android Pro] Notification的使用
  • [Bada开发]初步入口函数介绍
  • [C++]AVL树怎么转
  • [dart学习]第四篇:函数