Java代码规范检查插件

2023-10-30

​​​​​​

代码规范工具是什么

 
  1. 大家应该都有过写完代码后review的情况;用于提高编码质量,尽早的发现问题;节约开发时间和成本。

  2. 但review 这个过程往往要消耗 更多的开发资源。

  3. 所以就出现 自动检测可能代码中存在的问题的工具 ,我们一般把这类工具称为静态代码扫描工具。

  4. 常见的静态代码扫描工具有 checkstyle ,findBug,PMD,Jtest等等,它们有的用来寻找编码格式问题,有的用来定位可能存在的BUG。代码规范工具呢 。顾名思义主要关心其编码格式,规范。除了最后的静态代码扫描外,有些插件也支持在编码过程中实时显示规范问题。

  5. 代码规范工具 是自动比对代码与规范差异的一个工具,用以减少实现这一规范需要耗费的成本。

代码规范的目的

对于整个团队而言,代码规范的目的实际上是为了提高效率。
秦始皇书同文,车同轨,定义了一个规范,才会让整体的交流变得简单,轻松。代码也是一样。
我们编码过程中,免不了团队协作,免不了迭代,升级,维护。
从自己角度看 遵循开发规范,可以让自己在后续迭代中,对于之前代码能够尽快熟悉,不会写了就忘,不会为了之前的一个问题,花费特别长的时间去熟悉逻辑 ,寻找BUG
从团队的角度看,需求可能不一定是一个人维护迭代升级,遵循规范能够减少团队的交流沟通成本。这样后面可以理直气壮的说一句,代码(注释)里面写的很详细,而不是代码需要讲解才能看的懂。

常见的一些代码规范工具

Alibaba Java Coding Guidelines

  1. 整体介绍
    Alibaba Java Coding Guidelines 专注于Java代码规范,目的是让开发者更加方便、快速规范代码格式。该插件在扫描代码后,将不符合规约的代码按 Blocker、Critical、Major 三个等级显示出来,并且大部分可以自动修复,它还基于 Inspection 机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。

  2. 安装步骤
    File > Settings > Plugins > Marketplace 搜索 “Alibaba Java Coding Guidelines”,按照提示进行安装,然后重启即可。

  3.  使用说明
    3.1. 运行方式
    (1) .可以Tools > 阿里编码规约 > 编码规约扫描

    (2)在编辑界面或者项目区域点击右键,在右键菜单中选择“编码规约扫描”即可:

    3.2.菜单功能

    编码规约扫描:开始扫描代码

    打开/关闭实时检测功能:实时检测代码,一般机器性能比较好的话可以开启这项功能

    切换语言至英文:中英文切换

    3.3. 运行结果
    扫描完成后显示结果如下,我们可以看到扫描结果主要分为 Blocker(阻挡者)、Critical(严重问题)、Major(主要的)三个大类,它们表示的是问题的严重程度,严重程度由高到低为:Blocker > Critical > Major,至于每一类中都会包含什么样的问题,图中的内容已经说明了一切 

    3.4. 工具栏介绍

    1. Rerun Inspection:重新运行一次扫描

    2. Close:关闭真个AJCG面板

    3. Expand All:展开结果的树状结构,整个结果是树状结构的。

    4. Collapse All:收起结果的树状结构

    5. Go Pre Problem:选择上一个问题

    6. Go Next Problem:选择下一个问题

    7. Help:帮助

    8. Group by Serverity:

    9. Group by derectory:按目录分组/按类名分组间切换

    10. Filter resoled items:过滤掉已经解决的项

    11. Autoscroll to Source:自动滚动到源码

    12. Export:导出,可以导出为XML和HTML两种格式

    13. Edit Settings:编辑设置

SonarLit
sonarlit 插件的安裝及使用

安装
打开IntelliJ IDEA—>settings—>plugins,在Marketplace搜索SonarLint,下载安装,重启IntelliJ IDEA。
也可以选择下载插件,丢到plugin 目录手动安装

sonarlint-intellij-6.7.0.45926.zip
使用说明
配置自动扫描
打开IntelliJ IDEA—>settings—>Other Settings—>SonarLint General Settings或者IntelliJ IDEA—>settings—>SonarLint General Settings,勾选Settings—>Automatically trigger analysis,点击Apply,再点击OK。
手动执行扫描
鼠标移动到项目根目录,右键选择Ayalyze,选择Ayalyze with SonarLint。

扫描后的结果说明 

 

SonarLint插件在IntelliJ IDEA 中页面显示的名词解释:

Current file:当前文件(展示当前文件存在的哪些问题,以及解决方法)

Rule:规则(告诉你问题的具体内容,并在最后告诉你如何解决这个问题)

Report:报告(鼠标移动到项目根目录,右键选择Ayalyze,选择Ayalyze with SonarLint,完成之后的结果显示,包含整个项目的所有文件的问题)

Locations:位置(告诉你,在哪个地方有问题,问题的重复位置)

Issues:问题

每个issue有五个等级:
BLOCKER(致命):会影响应用程序的缺陷:内存泄漏,未关闭的JDBC连接…必须立刻修复的代码
CRITICAL(关键 ):可能会影响应用程序的缺陷或者是安全性缺陷:空的catch块,sql注入,…必须立刻查看代码;
MAJOR(主要):可能会影响开发者效率的质量缺陷:未覆盖的代码,重复块,未使用的参数….
MINOR(微小):可能会影响开发者效率的质量缺陷:每行不能太长,“switch”语句应该至少有三个条件,….
INFO(未知):既不是缺陷也不是质量问题,只是一个发现。
每个issue有三个状态定义:
Bug:窃听器(可靠性),避免错误和未定义的行为
Vulnerability:漏洞(安全),避免破坏或攻击
Code Smell:代码嗅觉(可维护性),简化代码更新,并提高开发人员的速度
具体用法:

Locations: 


左边信息展示,假如这个问题在当前文件中出现多次,则在这条问题的后面会有的标识,选中并鼠标双击之后,在右边显示具体的位置,如图所示[注:括号里面的数字表示问题在第几行的第几列]。

Report:

 Log:

如何去掉不需要的扫描规则

1.打开settings

2.选择 tools--> Sonarlint -->Rulse →搜索对应的规则

插件对比

插件

格式检查

BUG扫描,漏洞分析

更新时间

扫描信息收集

规则自定义程度

插件下载量

marktplace 评分

集成进其他流水线或仓库组件

Alibaba Java Coding Guidelines

支持 不支持 不支持

动态扫描支持

最终结果不支持

不支持
SonarLit 支持 支持 支持(sonarqube) 支持 支持(gitlab,jenkins)

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

Java代码规范检查插件 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 加速代码 - 3D 数组

    我正在尝试提高我编写的一些代码的速度 我想知道从 3d 整数数组访问数据的效率如何 我有一个数组 int cube new int 10 10 10 我用价值观填充其中 然后我访问这些值数千次 我想知道 由于理论上所有 3d 数组都存储在内
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的

随机推荐

  • SARScape中用sentinel-1数据做SBAS-InSAR完整流程(1/2)

    SARScape中用sentinel 1数据做SBAS InSAR完整流程 1 SABA InSAR原理简述 2 数据采集和预设 2 1 SAR数据采集 2 2 DEM数据下载与放置 2 3 精密轨道数据下载与放置 2 4 制作研究区范围矢
  • 三分钟教你小程序实现无感刷新!

    无感刷新 无感刷新对于前端来说是一项非常实用的技术 其本质是为了优化用户体验 让用户感受不到token已经过期 本质上就是登录时 储存token和refresh token 当token过期或错误时不需要用户跳回登录页重新登录 而是在响应拦
  • python读取文件名存到list_python读取文件名称生成list的方法

    下面为大家分享一篇python读取文件名称生成list的方法 具有很好的参考价值 希望对大家有所帮助 一起过来看看吧 经常需要读取某个文件夹下所有的图像文件 我使用python写了个简单的代码 读取某个文件夹下某个后缀的文件 将文件名生成为
  • 力扣 删除链表的节点

    给定单向链表的头指针和一个要删除的节点的值 定义一个函数删除该节点 返回删除后的链表的头节点 注意 此题对比原题有改动 示例 1 输入 head 4 5 1 9 val 5 输出 4 1 9 解释 给定你链表中值为 5 的第二个节点 那么在
  • 手动实现Spring IOC 跟 AOP 的雏形

    关注后回复 进群 拉你进程序员交流群 作者丨sowhat1412 来源丨sowhat1412 Spring Spring make java more simpleSpring make java more modernSpring mak
  • 在Linux下用C语言写贪吃蛇;

    项目思路 ncurses上下左右键的获得 gt 贪吃蛇地图的实现 gt 显示贪吃蛇的完整身子 gt 贪吃蛇向右移动 gt 贪吃蛇撞墙找死 gt 贪吃蛇自行向右行走与页面一起刷新 利用线程解决 gt 贪吃蛇四个方向的自由走位 gt 贪吃蛇吃饭
  • 教程:群体演化方法分析玉米的驯化与改良

    一般文章在筛选 正选择区间 时 大多 不考虑 群体的 演化历史 即不考虑 群体大小 的变化 只进行亚群之间各种群体遗传参数的对比 这可能会产生大量的假阳性 另一方面 研究一般也 不考虑 遗传信息的 迁移 所以作者希望将群体演化历史及遗传信息
  • MySQL高性能索引策略

    文章目录 高性能索引策略 独立的列 前缀索引 多列索引 选择合适的索引列顺序 聚簇索引 覆盖索引 使用索引扫描来做排序 高性能索引策略 正确地创建和使用索引是实现高性能查询的基础 高效地选择和使用索引有很多种方式 其中有些是针对特殊案例的优
  • 二叉树的基本概念(定义,特性,存储结构等)

    一 二叉树的定义 二叉树 Binary Tree 是n n gt 0 个数据元素的有限集合 该集合可以为空 空二叉树 也可以由一个称为根 root 的元素及两个不相交的 被分别称为左子树和右子树的二叉树组成 如上图中含有7个结点 其中A是根
  • Python安装MySQL库详解(解决Microsoft Visual C++ 9.0 is required )

    前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件 而当数据量增加之时 就需要将其存储至本地数据库了 Python访问数据库需要对应的接口程序 我们可以把接口程序理解为Python的一个模块 它提供了数据库客户端的接
  • css3选择器如何选择同一个父级下的相同class的第一个元素 nth-child nth-of-type

    1 2 3 4 5 选择第一个类名 demo item nth of type 1 demo item nth child 1 选择最后一个类名 demo item last child 选择其中一个指定的类名 demo item nth
  • Window.open()方法参数详解

    1 最基本的弹出窗口代码 window open page html 2 经过设置后的弹出窗口 window open page html newwindow height 100 width 400 top 0 left 0 toolba
  • 这三个 Go 水平自测题,手写不出来还是先老实上班吧

    现在技术文章特别卷 啥啥底层都能给你分析的头头是道 但是分析的对不对要看作者水平 很有可能一个错 抄他的那些人也跟着错 因为我以前看源码的时候就经常感觉自己在两种状态下切换 懂了 娘咧漏看了 这个函数干啥的 八股文这个事儿 其实也特别考验面
  • JS 将一维数组转化为二维数组

    1 需求 遇到一个送礼物的需求 礼物有很多个数据 这里是61个 这里用到的是轮播图进行切换 但是后端返回的是一个礼物list 前端需要对数据进行处理 要求每8个为一个数组 组成二维数组 2 js 代码 let list giftList l
  • Vue +Vant 实现顶部搜索栏

    搜索栏组件源码 SearchBar vue
  • 2023 年 Pycharm 安装教程

    简介 PyCharm是一款Python IDE 其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具 比如 调试 语法高亮 Project管理 代码跳转 智能提示 自动完成 单元测试 版本控制等等 此外 该IDE提供了一些高
  • 基于ssm超市管理系统(程序+数据库+文档)046

    大家好 我是CZ淡陌 一名专注以理论为基础实战为主的技术博主 将再这里为大家分享优质的实战项目 本人在Java毕业设计领域有多年的经验 陆续会更新更多优质的Java实战项目 希望你能有所收获 少走一些弯路 向着优秀程序员前行 更多优质项目
  • VSCode连接远程服务器

    一 安装插件 安装remote ssh remote WSL remote Development这三个插件 二 配置路径ssh config文件的路径 点击remote ssh的小齿轮 gt extension settings 将本地的
  • PCB原理图导入的2种方法,小白也能看懂!

    PCB原理图导入的2种方法 小白也能看懂 原创 凡亿教育 凡亿PCB 凡亿PCB Altium Designer的原理图设计导入PCB 存在两种方法 一种是直接导入法 类似于Allegro的第一方导入 另一种是间接法 即网表对比导入法 一
  • Java代码规范检查插件

    代码规范工具是什么 大家应该都有过写完代码后review的情况 用于提高编码质量 尽早的发现问题 节约开发时间和成本 但review 这个过程往往要消耗 更多的开发资源 所以就出现 自动检测可能代码中存在的问题的工具 我们一般把这类工具称为