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

静态代码扫描工具 Sonar 配置及使用

概览

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

主要特点:

  • 代码覆盖:通过单元测试,将会显示哪行代码被选中
  • 改善编码规则
  • 搜寻编码规则:按照名字,插件,激活级别和类别进行查询
  • 项目搜寻:按照项目的名字进行查询
  • 对比数据:比较同一张表中的任何测量的趋势

SonarQube 安装与配置

Sonar 是 Codehaus 上面的一个开源项目,使用的是 LGPL V3 软件许可。我们可以在其官方网站上下载其源代码及安装包。下载网址为:Download | SonarQube | Sonar,LTS 版本是长期支持版本,后期会继续维护,是比较稳定的版本,因此,这里我们选择下载的是 LTS 版(V5.6.6)。注意:本版本的 SonarQube 需要 Java 8 及以上的环境,下载完毕压缩包后,解压到合适的目录下。打开软件的 bin 目录,如下图所示

根据自己的电脑系统,打开不同的目录。例如:我的电脑是 windows7 64 位,打开最下方的目录,运行 StartSonar.bat,然后在浏览器中访问:http://localhost:9000/ (SonarQube 默认访问地址),成功打开即说明,SonarQube 安装成功。如下图所示(已安装中文插件): 

SonarQube 的默认管理员账号是:admin,密码为:admin。登录后,可安装一些插件,帮助我们完成相应的任务,例如:中文语言插件、SonarJS 插件等。插件的安装,如下图所示:第一步点击左上角的 ”Administration”,跳转到 Administrator 界面。

在 Administrator 界面,下拉 Syetem 选项,点击 Update Center,会跳转到 Update Center 界面。在这个界面上,可以清楚的看到当前已安装了那些插件,如下图所示:

这里我们需要安装两个插件:一个中文语言包,一个 JS 静态代码扫描插件 SonarJs(如果已安装,需要更新到3.1.1.5128或更高版本)。

点击 “Available”,显示所有可以安装的插件,我们选择安装中文语言包 Chinese Pack 和 JS 静态代码扫描插件 SonarJS,如下图所示:

如果安装的过程中,出现无法下载的异常,如下图所示:

 

根据它提示的信息,到对应的网站下载该插件。下载完成后,把下载的 jar 包复制到 SonarQube 安装的目录 plugins 目录下,例如:E:\Program Files (x86)\sonarqube-5.6.6\extensions\plugins,然后重启 SonarQube,即可实现插件的安装。 

关于 SonarQube 重启,值得注意的是:除了需要关闭 SonarQube 控制台外,还需要调用任务管理器,把正在运行的 java.exe 进程都给杀死,然后再次运行 StartSonar.bat,方可重启SonarQube。经过以上软件和插件的安装,JS 代码静态扫描的环境已完成搭建,接下来就是根据不同的项目,设置不同的 SonarQube 配置项。对于 Android 混合应用,进行 JS 代码静态扫描,有两种工具以完成:使用 AS 的插件 SonarLint、使用 Sonar-Runner。无论使用哪种方式,都需要在 SonarQube 配置对应的项目,如下图所示:

 

 通过以上步骤,进入到项目配置界面,如下图所示:点击 Create Project,创建一个项目,其中 Name 和 Key 是必填项。如下图所示:

两种扫描方式

SonarLint 插件

打开 Android Studio(示例版本:2.3.3),打开 File-----Settings----Plugins----Browse Repositories,搜索 SonarLint,安装此插件,如下图所示:

接下来配置 SonarLint 插件:打开 File----Settings----Other Settings----SonarLint General Setting,添加一个 SonarQube服务,如下图所示: 

击 next,需要选择账号类型,及账户名与密码,如下图所示:

账户名与密码均为:admin,点击 next,完成 SonarQube 服务的设置,设置成功后,会出现以下界面,如图所示:

点击下方的 “Update binding”,更新 SonarQube 服务的配置信息。接着配置 SonarLint Project Settings,如下图所示:

下拉选择服务 “Sonar”,选择 SonarQube 服务创建的项目 ”hsdzda”,点击 apply,ok。通过以上配置,完成插件 SonarLint 的配置。接下来,指定项目进行静态代码扫描,如下图所示:

Sonar-Runner 工具

AS 插件扫描代码的方式,方便开发人员修改,但这并不适合测试人员进行 bug 的后期管理及后期接入 CI 中。使用 Sonar-Runner,可把扫描结果上报到 SonarQube 网站上,网站以图形化的效果进行展示,方便测试人员快速上报及bug后期管理。使用 Sonar-Runner 工具,需要先下载这个工具,并配置对应的环境变量,下载地址为:http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip,下载完成后,解压到合适的目录(不要包含中文)。打开电脑的高级系统配置,配置环境变量。新建一个系统环境变量,变量名为 ”SONAR_RUNNER”,变量值为刚才解压的文件目录,例如:E:\Program Files (x86)\sonar-runner-2.4。编辑系统环境变量path,添加 Sonar-Runner 的 path 变量值,例如:%SONAR_RUNNER_HOME%\bin; 点击确定。配置完成后,打开控制台,输入sonar-runner –h,然后回车,显示如下信息,即说明配置成功。

 在需要扫描的项目根目录下,创建一个名为 ”sonar-project.properties” 文件,配置信息如下所示: 

其中 sonar.projectKey 和 sonar.projectName 为之前 SonarQube 服务上的项目配置信息,必须要保持一致。Sonar.sources 为要扫描的目录,这里选择 assets 目录。打开 cmd 窗口,进入到待扫描项目的根目录下,执行命令 sonar-runner,回车,即开始静态代码扫描工作。如下图所示:  

扫描成功,会有以下提示:

打开浏览器,访问http://localhost:9000/ ,即可以图形化的效果,展示扫描结论,如下图所示:

具体的 bug 列表: 

需要注意的是:无论使用 SonarLint 插件,还是 Sonar-Runner 进行静态代码扫描,均要保持SonarQube 服务是运行的,才可对项目进行扫描

相关文章:

静态代码扫描工具 Sonar 配置及使用

概览 Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代…...

docker 03(docker 容器的数据卷)

一、数据卷的概念和作用 删除后,数据也没了。 不能 数据卷 是宿主机中的一个目录或文件当容器目录和数据卷目录绑定后,对方的修改会立即同步一个数据卷可以被多个容器同时挂载 作用: 容器数据持久化 外部机器和容器间接通信 容器之间数据交换…...

【04】基础知识:typescript中的类

一、es5 对象 1、定义 类(对象) 原型链上的属性和方法会被多个实例共享。构造函数中的属性和方法不会。 // 自定义构造函数 function Person(name, age) {this.name namethis.age agethis.getInfo function() {console.log(${this.name} - ${this.…...

CCClippingNode:在游戏中实现遮罩效果、剪切效果,以涂抹糖霜为例,如何更好的实现涂抹效果,提高用户的游戏体验

CCClippingNode:在游戏中实现遮罩效果、剪切效果,以涂抹糖霜为例,如何更好的实现涂抹效果 设备/引擎:Mac(11.6)/cocos2d-x 开发工具:Xcode(13.0) 开发需求&#xff1a…...

cuda gdb调试

如果cudaDeviceEnablePeerAccess函数不支持或不起作用,您仍然可以尝试其他方法来实现GPU之间的数据交换和通信。以下是一些替代方法: 通过主机内存进行数据传输: 如果GPU之间的数据交换不是非常频繁,您可以将数据从一个GPU复制到…...

【vim 学习系列文章 5 - cscope 过滤掉某些目录】

文章目录 cscope 过滤目录介绍 cscope 过滤目录介绍 第一步创建自己的cscope脚本~/.local/bin/cscope.sh,如下: function my_cscope() {CODE_PATHpwdecho "$CODE_PATH"echo "start cscope...."if [ ! -f "$CODE_PATH/cscope.…...

实验三 HBase1.2.6安装及配置

系列文章目录 文章目录 系列文章目录前言一、HBase1.2.6的安装二、HBase1.2.6的配置2.1 单机模式配置2.2 伪分布式模式配置 总结参考 前言 在安装HBase1.2.6之前,需要安装好hadoop2.7.6。 本篇文章参考:HBase2.2.2安装和编程实践指南 一、HBase1.2.6的安…...

LightDB sequence支持MAXVALUE最大值与Oracle相同

功能介绍 Oracle数据库在创建sequence的时候可以支持设置maxvalue 为9999999999999999999999999999,这样的SQL在LightDB23.3版本之前都是执行失败的。为了方便Oracle用户迁移到LightDB上,在LightDB23.3版本上,增加了sequence支持maxvalue设置…...

二、Kafka快速入门

目录 2.1 安装部署1、【单机部署】2、【集群部署】 2.2 Kafka命令行操作1、查看topic相关命令参数2、查看当前kafka服务器中的所有Topic3、创建 first topic4、查看 first 主题的详情5、修改分区数(注意:分区数只能增加,不能减少)…...

消息中间件-kafka实战-第五章-kafka重复消费、顺序消费及死信队列

目录 一、参考二、路由规则(分片规则)三、触发重复消费的场景场景一:触发rebalance问题描述可能原因实际影响参数在kafka0.10.1 之前:在kafka0.10.1之后:解决方案 场景二:服务宕机可能原因解决方案 消息幂等性 四、kaf…...

python爬虫9:实战2

python爬虫9:实战2 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…...

从业务层的代码出发,去排查通用框架代码崩溃的问题

目录 1、问题说明 1.1、Release下崩溃,Debug下很难复现 1.2、用Windbg打开dump文件,发现崩溃在通用的框架代码中 2、进一步分析 2.1、使用IDA查看汇编代码尝试寻找崩溃的线索 2.2、在Windbg中查看相关变量的值 2.3、查看最近代码的修改记录&#…...

LLM预训练大型语言模型Pre-training large language models

在上一个视频中,您被介绍到了生成性AI项目的生命周期。 如您所见,在您开始启动您的生成性AI应用的有趣部分之前,有几个步骤需要完成。一旦您确定了您的用例范围,并确定了您需要LLM在您的应用程序中的工作方式,您的下…...

[Machine Learning] 损失函数和优化过程

文章目录 机器学习算法的目的是找到一个假设来拟合数据。这通过一个优化过程来实现,该过程从预定义的 hypothesis class(假设类)中选择一个假设来最小化目标函数。具体地说,我们想找到 arg min ⁡ h ∈ H 1 n ∑ i 1 n ℓ ( X i…...

serialVersionUID 有何用途?如果没定义会有什么问题?

序列化是将对象的状态信息转换为可存储或传输的形式的过程。我们都知道,Java 对象是保持在 JVM 的堆内存中的,也就是说,如果 JVM 堆不存在了,那么对象也就跟着消失了。 而序列化提供了一种方案,可以让你在即使 JVM 停机…...

C# OpenCvSharp DNN 二维码增强 超分辨率

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Dnn; using OpenCvSh…...

this.$refs使用方法

深入理解和使用this.$refs——Vue.js的利器 Vue.js是一个流行的JavaScript框架,用于构建交互性强大的用户界面。在Vue.js中,this.$refs是一个强大的特性,允许你直接访问组件中的DOM元素或子组件实例。本教程将带你深入了解this.$refs的使用方…...

Ohio主题 - 创意组合和代理机构WordPress主题

Ohio主题是一个精心制作的多用途、简约、华丽、多功能的组合和创意展示主题,具有敏锐的用户体验,您需要构建一个现代且实用的网站,并开始销售您的产品和服务。它配备了最流行的WordPress页面构建器 WPBakery Page Builder(以前称为…...

mysql 、sql server trigger 触发器

sql server mySQL create trigger 触发器名称 { before | after } [ insert | update | delete ] on 表名 for each row 触发器执行的语句块## 表名: 表示触发器监控的对象 ## before | after : 表示触发的时间,before : 表示在事件之前触发&am…...

自然语言处理从入门到应用——LangChain:索引(Indexes)-[检索器(Retrievers)]

分类目录:《自然语言处理从入门到应用》总目录 检索器(Retrievers)是一个通用的接口,方便地将文档与语言模型结合在一起。该接口公开了一个get_relevant_documents方法,接受一个查询(字符串)并返…...

Java全栈开发工程师的实战面试经历:从基础到微服务的深度探讨

Java全栈开发工程师的实战面试经历:从基础到微服务的深度探讨 1. 面试官开场介绍 面试官:你好,欢迎来到我们的面试环节。我是今天的面试官,负责对候选人的技术能力进行评估。我看到你的简历上写着有5年的Java全栈开发经验&#…...

OpenClaw+GLM-4.7-Flash:个人旅行计划自动生成与优化

OpenClawGLM-4.7-Flash:个人旅行计划自动生成与优化 1. 为什么需要AI旅行助手? 去年夏天,我计划带家人去云南旅行时,花了整整三个晚上对比机票价格、筛选酒店、计算景点间的交通时间。当我在凌晨两点盯着Excel表格里混乱的日期和…...

告别静态贴图!用Cesium自定义材质打造会‘呼吸’的3D导航线

告别静态贴图!用Cesium自定义材质打造会“呼吸”的3D导航线 在无人机航线规划或车辆轨迹可视化项目中,传统静态贴图导航线常面临一个尴尬问题:当地图缩放时,箭头密度要么拥挤不堪,要么稀疏失真。这就像给动态场景穿上了…...

ANIMATEDIFF PRO性能对比:Ubuntu与Windows系统基准测试

ANIMATEDIFF PRO性能对比:Ubuntu与Windows系统基准测试 同样的硬件,不同的系统,AI视频生成性能究竟有多大差异? 作为一名长期从事AI视频生成的技术从业者,我经常被问到一个问题:在Ubuntu和Windows系统上运行…...

用DeerFlow做竞品分析:5分钟自动生成全面竞品研究报告

用DeerFlow做竞品分析:5分钟自动生成全面竞品研究报告 1. DeerFlow简介:您的智能研究助手 DeerFlow是一款由字节跳动开源的深度研究自动化工具,它整合了语言模型、网络搜索和代码执行能力,能够快速完成复杂的研究任务。这个工具…...

Z-Image i2L模型压缩技术:轻量化部署实践指南

Z-Image i2L模型压缩技术:轻量化部署实践指南 1. 引言 当你兴奋地部署了一个强大的图像生成模型,却发现设备内存告急、推理速度慢如蜗牛,这种体验确实让人沮丧。Z-Image i2L作为一款创新的图像到LoRA模型,虽然功能强大&#xff…...

CFO/SFO/STO/CFD/IQ不平衡/IQ gain mismatch/IQ phase mismatch/干扰信号载波频率 等等蓝牙通信中干扰参数解析

载波频偏和采样频偏确实来自物理上不同的时钟源,虽然它们可能在数字通信系统中相互影响。 我们可以从三个层面来理清它们的关系: 2. 为什么容易混淆 因为在实际电路中,射频本振和采样时钟可能来自同一个参考晶振。在一些低成本或集成度高的系统中,收发信机通过锁相环(PL…...

别再手动校正了!用Landsat 9 L2SP地表反射率数据,在QGIS里5分钟搞定NDVI和水体提取

遥感分析效率革命:用Landsat 9 L2SP数据在QGIS中实现5分钟精准制图 当遥感数据处理流程从传统数小时缩短至五分钟,这意味着什么?去年在亚马逊雨林监测项目中,我们团队曾因大气校正步骤延误错过了最佳干预时机。如今Landsat 9 L2SP…...

KLite:轻量级嵌入式实时操作系统内核解析

KLite:一款简洁易用的嵌入式实时操作系统内核 1. 项目概述 1.1 系统定位 KLite是一款面向嵌入式领域的轻量级抢占式实时操作系统内核,采用MIT开源协议发布。该系统专为资源受限的微控制器设计,核心设计理念是保持功能完整性的同时&#xff…...

LangGPT:革新自然语言编程的结构化提示词框架

LangGPT:革新自然语言编程的结构化提示词框架 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert!🚀 Structured Prompt,Language of GPT, 结构化提示词,结构化Prompt 项目地址: https://gitcod…...