当前位置: 首页 > 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方法,接受一个查询(字符串)并返…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...