代码质量检测(三)—— SonarLint和SonarQube的本地使用

2023-11-11

        根据《代码质量检测(一)—— 常用代码质量管理工具》的介绍和《代码质量检测(二)—— 如何选择代码检查工具》的分析,我们大概得出结论,在当前开源的代码质量检测工具中(阿里系列除外):

pmd:基于源代码分析,主要面向安全编码规则,如“避免声明同名变量”,包括风格类、类型使用等等,具备一定的数据流分析和路径分析能力。

checkstyle:基于源代码,与pmd类似,但更侧重编码的语法风格,分析深度不及pmd。

findbugs:基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等,分析深度大于前述两个。

sonar:定位是代码质量平台,本身不进行代码分析,但可以集成各个静态分析工具以及其他软件开发测试工具(如上述的pmd、checkstyle、findbugs等),并基于集成工具的结果数据按照一定的质量模型,如iso-9126,对软件的质量进行评估。且具备和Jenkins、maven等集成的支持。   

        故本文优先选取SonarQube这一款开源工具来进行安装使用。

        官网:Sonar官网

一、SonarLint

        SonarLint是一个IDE的代码质量检测扩展插件,可以帮助我们检测出代码中的坏味道。它能帮助发现和修复我们所写代码质量问题,协助我们在代码提交前就暴露修复问题。

1.1 插件安装

        其安装和配置可参考:IDEA中SonarLint插件的安装与配置_idea sonarlint_智鼎在线IT团队的博客-CSDN博客

(1)在线安装

        IDEA -> File -> Settings -> Plugins -> Marketplace,搜索SonarLint,然后点击installed,再apply - ok就可以了。

 (2)离线安装

1. 需要在Jetbrains的官网下载该插件的离线安装包(注意:需要关注选择的插件版本与自己使用的IDEA版本以及版本号是否适配,可以与自己使用的版本号进行比对)。

2. 打开IDEA,进入 settings.

3. 选择 Plugins, 点击 Install Plugin from Disk.

4. 选择下载后的插件压缩包,然后点击 OK.

5. 点击applyok,重启idea让插件生效

在这里插入图片描述

 在这里插入图片描述

1.2 配置SonarLint General Settings

(1)选择和禁用某些规则

(2)需要同步自定义的规则时,需要绑定到SonarQube

         在弹窗窗口里,填写这个SonarLint的名称,选择的右边配置,输入sonarQube IP和端口号,完成后点击Next.

         设置认证方式,有Token和用户名密码两种方式,根据自己的情况选择对应方式进行配置。

这里选择账号密码的形式,默认为admin/admin。

在这里插入图片描述

        开启自动分析,这里上面红框Automatically trigger analysis有配置是否允许自动分析,默认是勾选上的。根据自己需求选择是否需要勾选开启,然后点击apply保存配置。

在这里插入图片描述

1.3  配置SonarLint Project Settings

(1)选择下图中SonarLint Project Settings的菜单
(2)勾选Enable binding to remote SonarQube server
(3)在Bind to server 右边下拉选择刚才配置的 sonar配置名称
(4)配置SonarQube project,可以点击Search in List,在弹出框里找到想使用的某个规则选择想使用的即可。若弹窗中没有项目,说明再SonarQube中未建立项目,可以现在SonarQube中新建一个空的项目,然后再绑定。
(5)点击Apply使得配置生效保存

在这里插入图片描述

 1.4 使用SonarLint

        在需要检测的单个文件或者单个项目上右键 --> Analyze --> Analyze with SonarLint,或者选中文件或目录,点击菜单栏 Analyze --> Analyze with SonarLint。

        默认会在IDEA底部打开sonarLint标签窗口菜单,根据列出的代码质量问题一个个解决问题即可。

        如果没有或者不小心关闭了底部的sonarLint标签窗口,可以点击菜单 view->Tool Windows中找到 SonarLint重新打开SonarLint窗口

在这里插入图片描述

        有了代码质量检测工具以后,在一定程度上可以保证代码的质量。对于每一个问题,SonarLint都给出了示例,还有相应的解决方案,教我们怎么修改,极大的方便了我们的开发。比如,对于日期类型尽量用LocalDate、LocalTime、LocalDateTime,还有重复代码、潜在的空指针异常、循环嵌套等等问题。

        有了代码规范与质量检测工具以后,很多东西就可以量化了,比如bug率、代码重复率等,还可以自定义各种指标,方便管理人员查看。为此,我们需要使用SonarQube平台来记录每次检测分析的结果,这样就可以进行分析和统计,并且可以直观的看到这一切!

 二、SonarQube

          SonarQube是一个开源的代码质量管理平台。下载地址

        根据自己安装的jdk版本选择合适的SonarQube版本,一定要注意下载该SonarQube之前,需要去文档看下jdk要求

 2.1 安装

        可以参考上述当前版本的SonarQube说明文档

         本文在windows上使用zip安装:

 (1)解压之前下载的安装包

(2)在减压文件的bin目录下,找到对应的启动目录,然后执行其中的StartSonar.bat

(3) 启动成功后,访问http://localhost:9000 用初始管理员账号(admin/admin)登录

 

        将初始密码修改成自己的密码

 2.2 插件拓展

        所有插件的安装方式都一样,汉化、质量检测插件等等。

        (1) 汉化,安装中文插件

        方式一:在线安装

在这里插入图片描述

在这里插入图片描述

         汉化完重启

在这里插入图片描述

         重启完后,重新登录,界面已经是汉化后的

        方式二:离线安装

        因为墙的问题,这让在 github 上的各种插件的下载成了问题,如果你的服务器是内网的,或者你的宽带访问 github 不正常,则需要通过离线下载插件包的方式进行离线处理。

        在插件市场搜索插件并进入插件官方页面:注意,没有外网的,需要找个外网机器下载插件。

        确定插件对应的版本:版本需要匹配 

         将下载的插件jar包放到sonarQube的安装目录下的/extensions/plugins文件夹中。需要确保该文件夹的权限,确保插件有读取权限。

        重启 sonar 服务即可:在 UI 界面上重启,或者直接在服务器上重启 sonar 服务。

在这里插入图片描述

        服务重启完成后,插件就正常被加载生效了。

如果插件目录和插件本身权限不对导致程序无法正确加载插件,查看 sonar 日志可以看到权限错误的异常,这个很容易排查。

      (2) findbug插件 

         分析 Java 代码的基础包下载示例(这是必须的,不然有些插件无法运行);和汉化插件差不多,不在一一赘述。

在这里插入图片描述

如果知道对应的版本号,也可以直接到 Maven 中央仓库下载

        

2.3 配置Scanner        

        接下来,为了把检测的结果传到服务器,我们需要配置一个Scanner,参照Sonar Scanner for Maven

        Maven的SonarScanner被推荐作为Maven项目的默认扫描仪。通过常规Maven目标执行SonarQube分析的能力使其可以在Maven可用的任何地方(开发人员构建、CI服务器等)使用,而无需手动下载、设置和维护SonarQobe扫描仪安装。Maven构建已经拥有SonarQube成功分析项目所需的大量信息。通过基于该信息预配置分析,显著减少了手动配置的需要。

(1)在maven的settings.xml中的<pluginGroups>和<profiles>标签中加入:

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>http://localhost:9000/sonar</sonar.host.url>
                <!-- 配置自己的账号、密码,就无需每次使用token密钥 -->
                <sonar.login>admin</sonar.login>
                <sonar.password>admin123</sonar.password>
            </properties>
        </profile>
     </profiles>
</settings>

(2)在项目中添加sonar-maven-plugin 插件。

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.sonarsource.scanner.maven</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>3.9.1.2184</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

        若无网络,需要手动下载对应版本的插件,然后放置到maven仓库中:

        然后再引入项目中。

(3)在maven中或命令端口执行命令:mvn clean compile sonar:sonar

   或者执行命令时带上账户密码:

mvn clean verify sonar:sonar -Dsonar.projectKey=v1.1.1 -Dsonar.host.url=http:localhost:9000 -Dsonar.login=admin -Dsonar.password=admin123

说明:

projectKey:在sonarQube上创建项目时的项目标识;

host.url:本地sonarQube的地址;

login:sonarQube的登录账户;

password:sonarQube的登录密码(修改后的);

        由于项目设置的jdk为1.8,会出现如下错误:

         设置项目的jdk为11,然后重新使用上述命令编译:

         成功后,可以在控制台中看到这样的输出

        再次刷新 http://localhost:9000/ 会看到该项目的质量分析统计信息

 2.3 关闭服务

        关闭服务时,切勿直接关闭cmd窗口,否则会导致下次开启SonarQube的时候报错。

        正确的做法:在cmd中Ctrl+c终止服务,然后再关闭cmd窗口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码质量检测(三)—— SonarLint和SonarQube的本地使用 的相关文章

  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 连接外部 Accumulo 实例和 java

    我正在尝试使用 Accumulo 连接到虚拟机 问题是 我无法将其连接到 Java 中 我可以看到 Apache 抛出的网页 但我无法让它与代码一起工作 我认为这是缺乏知识的问题而不是真正的问题 但我找不到这方面的文档 所有示例都使用 lo
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 如何以编程方式使用包含多列的 where-in 子句执行 PostgreSQL 查询?

    我的查询是这样的 select from plat customs complex where code t code s in 01013090 10 01029010 90 它在 psql 控制台中运行良好 我的问题是如何在客户端代码中
  • 使用 Exec Maven 插件分叉 Java,而不使用“exec”目标

    来自文档 https www mojohaus org exec maven plugin exec exec在单独的进程中执行程序和Java程序 exec java在同一虚拟机中执行 Java 程序 我想 fork 一个 java 程序
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 无需递归即可对可观察结果进行分页 - RxJava

    我有一个非常标准的 API 分页问题 您可以通过一些简单的递归来处理 这是一个捏造的例子 public Observable
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • 使用 Apache 允许 Glassfish 和 PHP 在同一服务器中协同工作

    是否可以建立从 Java 到 php 文件的桥梁 我有一个用 Java 编写的应用程序 我需要执行http piwik org http piwik org 这是用 PHP 编写的 在服务器中 我正在运行 PHP 但无法从浏览器访问 php
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 带 getClassLoader 和不带 getClassLoader 的 getResourceAsStream 有什么区别?

    我想知道以下两者之间的区别 MyClass class getClassLoader getResourceAsStream path to my properties and MyClass class getResourceAsStre
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • VS中使用动态库

    VS中使用动态库 一 将DLL头文件添加到包含路径 属性 gt C C gt 常规 gt 附加包含目录 二 将DLL导入库添加到项目中 1 添加附加库目录 属性 gt 链接器 gt 常规 gt 附加库目录 2 添加附加依赖项 这一步骤 也可
  • 解决 Centos7 启动tomcat 但是外部不能访问的问题

    Step1 启动tomcat 进入 tomcat 所在的目录的 bin 的文件夹下执行 startup sh 命令 启动 tomcat 如果出现下面这种情况说明 tomcat 启动 成功 Step2 验证 tomcat 是否启动成功 输入
  • Request_获取请求参数通用方式演示

  • 射频功率放大器PA芯片选型

    一 功率放大器选型 下图示例一个PA的核心参数 从频率失真和非线性失真两个方面基本可以上述参数的含义及其作用 如频率范围 功率平坦度 S21等主要和频率失真有关 即不同频率信号所表现的增益和相位差值 以及该PA的适用频段 而输出功率 输出功
  • Outlier Detection for Improved Data Quality and Diversity in Dialog Systems-学习笔记

    Outlier Detection for Improved Data Quality and Diversity in Dialog Systems 论文按如下方式检测数据集中的异常值 1 生成每个实例的矢量表示 2 平均向量以获得均值表
  • Android下实现字符串或文件的MD5加密

    MD5 信息摘要算法简单介绍 MD5 Message Digest Algorithm 一种被广泛使用的密码散列函数 可以产生出一个128位 16字节 的散列值 hash value 用于确保信息传输完整一致 计算出来的MD5值是有可能重复
  • CVE-2023-33246 Apache RocketMQ 命令注入漏洞复现及分析

    CVE 2023 33246 Apache RocketMQ 命令注入漏洞复现及分析 0x0 威胁情报 漏洞编号 CVE编号 CVE 2023 33246 漏洞评估 危害评级 高危 漏洞类型 RCE 公开程度 PoC已公开 利用条件 1 在
  • 【数据结构与算法】3.(单向、无向、带权)图,广度、深度优先搜索,贪心算法

    文章目录 1 图简介 2 图的存储方式 2 1 邻接矩阵存储方法 2 2 邻接表存储方法 3 有向 无向图和查询算法 3 1 数据结构 3 2 广度优先算法BFS 3 3 深度优先算法DFS 3 3 1 DFS查询单条路径 3 3 2 DF
  • PhotoShop 之盖印图层

    Ctrl Shift Alt E 生成盖印图层 盖印图层实现的结果和合并图层差不多 也就是把图层合并在一起生成一个新的图层 和合并图层所不同的是 盖印图层是生成新的图层 而被合并的图层依然存在 保持其它图层完好无损
  • reverse ez_xor writeup

    拿到ez xor exe附件直接丢进PE 可以看到是64位exe文件 丢进ida64 Shift F12查看字符串 如果是笔记本电脑的话 F12自带热键 先按Fn 即Fn Shift F12 一般在这里找有没有和flag相关的字符串 可以看
  • SecureCRT软件安装

    首先从官网下载SecureCRT官网地址 https www vandyke com cgi bin releases php product securecrt 也可以从百度网盘下载 下载完毕后正常安装SecureCRT 注意选择安装路径
  • 17-链表

    链表 一系列结构连在一起 每一个结构体变量里面都有一个指针pNext pNext指向下一个结构体变量 尾节点的pNext指向NULL 静态链表 struct students stu1 1 a NULL struct students st
  • Pytorch搭建神经网络完成监督学习-分类任务

    一 创建训练集 为了保证后续过程中产生的随机数都是一致的 方便测试 我们首先种下一颗随机种子 import torch import matplotlib pyplot as plt import torch nn functional a
  • Air780E模块硬件资料

    模块硬件资料 资料简介 相关链接 规格书 Air780E 模块产品规格书 V1 0 0 pdf 硬件设计手册 Air780E 硬件设计手册 V1 0 5 pdf 原理图及PCB Air780E 封装 zip 参考设计原理图 AD PADS9
  • 我的csdn排名和浏览量半个月没有变化

    我的csdn排名和浏览量半个月没有变化 希望csdn的管理员看见了 可以查一下 这样让用户很不放心咱们网站
  • AAAI 2021论文:门控记忆神经网络

    多维时间序列由多个随时间演化的相关变量共同构成 这种数据结构广泛存在于科学研究和现实应用场景中 比如在电商场景中 多类产品的销售额随时间变化 共同构成一组多维时间序列 在金融股票市场中 多支股票的价格构成一组多维时间序列 提取这类数据结构中
  • 正态性检验ks和sw区别_非参数检验思路总结,清晰理解就靠它了!

    1 何时使用非参数检验 或许你还没有理解什么是参数检验 非参数检验 但一定曾在无意之中使用过它们 如我们常用的方差分析 T检验 都属于参数检验 参数检验 就是假定数据服从某种分布 通过样本信息对总体参数进行检验 因而在分析前 先要检验数据是
  • libghttp的使用

    libghttp的使用 前言 一 libghttp是什么 二 使用步骤 1 引入库 前言 需要使用get请求来获得点数据 但是由于需要用户名和密码 所以失败了 但是编译的过程还有其他还是有参考价值的 一 libghttp是什么 官方网站ht
  • 华为OD机试真题 Java 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路

    目录 专栏导读 一 题目描述 二 输入描述 三 输出描述 四 解题思路 解题思路如下 解题思路分析 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 专栏导读 一 题目描
  • 代码质量检测(三)—— SonarLint和SonarQube的本地使用

    根据 代码质量检测 一 常用代码质量管理工具 的介绍和 代码质量检测 二 如何选择代码检查工具 的分析 我们大概得出结论 在当前开源的代码质量检测工具中 阿里系列除外 pmd 基于源代码分析 主要面向安全编码规则 如 避免声明同名变量 包括