java自定义findbugs规则_findbugs自定义规则并配置实现检测

2023-11-05

findbugs不过多介绍了,对于这个主题找了一些资料,没有找到一个完整的介绍,要么是介绍怎么写detector,要么就是没有完整的介绍怎么配置生效,下面主要介绍一下怎么配置其生效,至于怎么写这个detector还是有很多资料说明的,不过在些也重复一下。

一、自定义detector

1 ForbidSystemOutClass检测类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.test.findbugs;importorg.apache.bcel.classfile.Code;importedu.umd.cs.findbugs.BugInstance;importedu.umd.cs.findbugs.BugReporter;importedu.umd.cs.findbugs.bcel.OpcodeStackDetector;public class ForbidSystemOutClass extendsOpcodeStackDetector {privateBugReporter bugReporter;publicForbidSystemOutClass(BugReporter bugReporter) {this.bugReporter =bugReporter;

}

@Overridepublic voidvisit(Code obj) {super.visit(obj);

}

@Overridepublic void sawOpcode(intseen) {if (seen ==GETSTATIC) {if ("java/lang/System".equals(getClassConstantOperand())&& ("out".equals(getNameConstantOperand()) || "error".equals(getNameConstantOperand()))) {

bugReporter.reportBug(new BugInstance("SYSTEM_OUT_ERROR", HIGH_PRIORITY)

.addClassAndMethod(this).addSourceLine(this));

}

}

}

}

View Code

参考:http://blog.csdn.net/franklies/article/details/6830534

https://www.ibm.com/developerworks/cn/java/j-findbug2/

至于里面的一些相关逻辑不在此探讨之内;

2 findbugs.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

View Code

3 messages.xml

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

detector decription]]>

short decription

long decription

System.out can't be released, you must delete it.]]>

System.out can't allow

View Code

参考:http://www.warski.org/staticaccess.html,这两个xml文件直接是从这个开源工程里面拿出来修改的

自定义检测规则主要有这三个步骤,写完这三个,剩下的工作就是编译配置;

二、编译配置

主要是编写ant脚本

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Builds the Systemout Checker.

View Code

使用ant命令:

ant dist

编译过程如下:

9609a36c7ed6768682c063c3121d0934.png

在ant配置脚本中已经默认把生成的testFindBugs.jar包放到findbugs安装目录里面的plugin中,对于自定义的规则,打成jar包后,放在这个plugin目录就会自动生效,而不是像网上介绍的那样放在findbugs.jar包中。

三、检测

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

Builds the Systemout Checker.

View Code

使用ant命令:

ant findbugs

过程如下:

ec2f13b66e8cb898c3cd0e58b28f8ce2.png

ok了,可以在工程的bin目录下,看到findbugs检测生成的结果findbugs_result.xml文件,至此整个过程结束,以上只上讲解了一个配置及过程,至于findbugs规则的具体编写以及findbugs.xml、message.xml里面的每个符号代表的意思没有涉及,向findbugs迈出了一步,接下来还是需要更多的时间摸索。

另外怎么在eclipse的插件中配置自定义的规则还是个问题,试过,可以把规则加进来,但检测的时候却没有生效,目前还没有找到原因。

附上demo:

b200ba9b925b939a39f0cd65b15eee81.png

右键保存这张图片到本地,然后把扩展名改成zip,解压就OK了。

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

java自定义findbugs规则_findbugs自定义规则并配置实现检测 的相关文章

  • 用vb语言编写一个抄底的源代码程序实例

    以下是一个基于通达信软件编写的简单抄底源代码程序 用于自动识别股票的底部形态并发出买入信号 vbs 复制 导入通达信软件自带的股票数据接口 Dim TdxApi Set TdxApi CreateObject TdxApi TdxLocal
  • Winform自定义控件 —— 指示灯

    在开始阅读本文之前 如果您有学习创建自定义控件库并在其他项目中引用的需求 请参考 在Visual Studio中创建自定义Winform控件库并在其他解决方案中引用https blog csdn net YMGogre article de
  • Rx Java 异步编程框架

    Rx Java 文章目录 Rx Java 名词定义 举个例子 基本概念 Backpressure Upstream Downstream Objects in motion Assembly time Subscription time R
  • Cocos2d-x使用Luajit将Lua脚本编译为bytecode,从而实现加密

    项目要求对lua脚本进行加密 查了一下相关的资料 得知lua本身可以使用luac将脚本编译为字节码 bytecode 从而实现加密 试了一下 确实可行 下面是使用原生的lua解释器编译字节码 1 新建一个名为1 lua的文件 里面只有一句话
  • 带宽与码元的关系_带宽、速率(波特率、比特率)和码元宽度简述

    首先弄清楚带宽和速率的关系 信道带宽与数据传输速率的关系可以奈奎斯特 Nyquist 准则与香农 Shanon 定律描述 奈奎斯特准则指出 如果间隔为 2 f 通过理想通信信道传输窄脉冲信号 则前后码元之间不产生相互窜扰 因此 对于二进制数
  • 【云原生之Docker实战】使用Docker部署web端vscode

    云原生之Docker实战 使用Docker部署web端vscode 一 vscode server介绍 二 检查本地docke环境 1 检查系统版本 2 检查docker版本 3 检查docker状态 三 下载vscode镜像 四 部署vs
  • 北京理工大学:《Python语言程序设计》详细笔记

    第一章 程序设计基本方法 计算机与程序设计 计算机是根据指令操作数据的设备 计算机发展参照摩尔定律 表现为指数形式 编译和解释 计算机执行源程序两种方式 编译和解释 编译 将源代码一次性转换成目标代码的过程 执行编译过程的程序叫编译器 co
  • C#是不是不能把基类对象强转成它派生类对象

    转载请标明是引用于 http blog csdn net chenyujing1234 有补充的 请大家指出 最近在论坛上看到有网友问到C 中对象强转的问题 自己虽然接触过C 但对这个特性还是第一次接触 所以这里找到一些资料与大家一起分享
  • unity 模仿原神的人物移动和镜头变换

    unity 模仿原神人物移动和镜头转换 自学了几周unity了 感觉还是要做点什么上手才快 所以先做个简单的RPG游戏吧 然后很快就做出了CS那种第一人称视觉的人物操控 不过感觉体验不太好 不能边走边看周围 所以重新模仿了原神那种可以环绕人
  • 3D建模教程分享

    全套3D建模教程让你从小白到大神 工欲善其事必先利其器 目前主流的3D建模软件当然是3DMAX MAYA还有ZBrush了 开始学习之路前这三个软件肯定是必备的 欢迎大家加入Q裙 939901947 领取各种学习资料和软件 迈出成为大神的第
  • linux系统创建新用户

    一般情况下linux系统创建 删除新用户主要有以下几种方式 1 创建新用户 useradd 用户名 删除用户 userdel 用户名 2 sudo useradd m 用户名 删除用户 sudo userdel r 用户名 可以直接删掉用户
  • 联想笔记本插入耳机仍外放--解决方式

    1 打开控制面板 2 点击硬件和声音 3 点击realtek音频管理器 4 点击设备高级设置 5 选中第二项 6 点击确定 关闭所有窗口即可解决该问题
  • 数学在机器学习中的重要性

    数学在机器学习中的重要性 by Dahua Lin Linear Algebra 线性代数 和 Statistics 统计学 是最重要和不可缺少的 这代表了Machine Learning中最主流的两大类方法的基础 一种是以研究函数和变换为
  • 使用BOTO进行S3各种操作

    使用BOTO进行S3各种操作 BOTO是一个开源的PYTHON发布包 是AWS AMAZON WEBSERVICE 的PYTHON封装 近期 我们公司用到国内某知名公司的S3云存储服务 需要调用该公司提供的S3 PYTHON SDK 鉴于该
  • Java连接MySQL数据库(多种连接方法)

    当我们掌握Java的基础知识后就可以学习一些Java的高级技术 或特性 了 例如 集合 多线程 网络编程 数据库技术 并发等等 其中数据库技术在Java的学习中也是相当重要的 今天就简单介绍一下Java与MySQL数据类的 1 提前准备 下
  • 亚马逊云科技实时 AI 编程助手 Amazon CodeWhisperer,开发快人一步!

    Amazon CodeWhisperer 是一款 AI 编码配套应用程序 可在 IDE 中生成整行代码和完整的函数代码建议 以帮助您更快地完成更多工作 在本系列文章中 我们将为您详细介绍 Amazon CodeWhisperer 的相关信息
  • 传输层——TCP报文头介绍

    16位源端口号 16位目的端口号 32位序列号 32位确认序列号 4位头部长度 保留6位 U R G A C K P S H R S T S Y N F I N 16位窗口大小 16位检验和 16位紧急指针 可选项 数据 源端口 长度为16
  • flex布局(骰子布局)

    1 应该都知道使用VS来敲写页面的第一步就是新建文件夹 也可以建文件夹 这是指只有html没有css与js才可以的 然后 可以在VS中打开文件夹 也可以直接把文件夹拖进去 这有两种方法 任意一种就行了 建议你直接拖进去 因为方便 2 这次的

随机推荐

  • Apache配置文件httpd.conf的理解

    httpd conf 是Apache使用的主要配置文件 1 文件位置 一般在 C wamp64 bin apache apache2 4 51 conf 2 是注释符号 1 解释每一指令的作用 2 指令模板 有时去掉 就能使用 3 Unix
  • Surprise库使用总结

    文章目录 Surprise库 1 加载数据模块 2 模型训练前的数据划分模块 2 1 交叉验证数据划分 2 2 训练集测试集划分 3 构建算法模块 3 1 记号说明 3 2 基于统计的算法 3 3 基于近邻 协同过滤 的方法 3 3 1 相
  • stata回归?固定效应模型(组内变换OR LSDV最小二乘法)

    面板数据分析与Stata应用笔记整理自慕课上浙江大学方红生教授的面板数据分析与Stata应用课程 笔记中部分图片来自课程截图 笔记内容还参考了陈强教授的 高级计量经济学及Stata应用 第二版 一 面板数据的定义 面板数据 panel da
  • 笔记本左Ctrl键失灵

    这两天发现笔记本的左Ctrl键单按失灵 无法使用快捷键 很是麻烦 一开始以为按键坏了 打算去官方店维修 但使用在线网站测试 先按其余任意按键的同时 再按左Ctrl 它有反应 可以使用在线键盘测试 zFrontier 装备前线对键盘按键进行在
  • vben admin框架 useForm 时间选择器 开始时间,结束时间解析.懒人方法

    因为搜索部分需要一个创建时间范围 因为DatePicker返回的是一个数组 开始自己在useTable 中的beforeFetch中拦截请求 然后解析参数 重组参数 这样有好多表格组件的时候 就需要写多个beforeFetch 然后闲来无事
  • 《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

    20年前 伴随着互联网打开信息化大门 技术人成为新时代的开拓者 在时代的召唤下 CSDN于2001年推出国内首个面向IT人员的专业杂志 程序员 成为一代代开发者的技术启蒙 20年后的今天 人工智能 云计算 大数据等新兴技术被赋予撬动新一轮产
  • 最有效的方法来增加在Map中的值

    关于这个是在一个博客上看到的 就像试一下 测试结果出人意料 看到这个标题可能还是觉得有点抽象 那么首先来一段代码 int count map containsKey string map get string 0 map put strin
  • 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

    给定一个包含 n 个整数的数组 nums 判断 nums 中是否存在三个元素 a b c 使得 a b c 0 找出所有满足条件且不重复的三元组 注意 答案中不可以包含重复的三元组 例如 给定数组 nums 1 0 1 2 1 1 4 满足
  • Linux的chmod

    chmod 命令是 Linux 系统中的一个重要命令 用于更改文件或目录的访问权限 chmod 命令可以设置文件或目录的所有者 所属组和其他用户的读 写 执行权限 通过 chmod 命令 用户可以控制文件或目录的访问权限 以保护重要数据不被
  • KVM学习(一)vnc连接

    完整流程Windows连接CentOS7 这个KVM系列是我的本科毕业设计 边学边做 长期更新 1 安装vncserver 首先看下实验环境 windows上跑的vmware虚拟机 vncserver安装在虚拟机上 虚拟机已经安装好了gno
  • 游戏服务器维护是干啥的,网络游戏的服务器维护都是在做些什么?

    来 我作为前网易游戏从业人员来说说真正服务器维护时候在做什么 服务器维护分成两种 紧急维护和日常维护 1 紧急维护 紧急维护一般就是硬件故障或者严重Bug 这个时候是各个团队最紧张的时候 每个团队都忙个不停 运营团队会发布公告 安慰玩家 统
  • 黑马JAVA P174 线程池概述、线程池的7个参数详解

  • Java Spring注解二:参数请求@RequestParam和@RequestBody

    作为一名crud boy 关于web请求 接口处理基本是家常便饭 涉及到这些中间肯定少不了请求参数 毕竟要根据请求参数才能进行相应的操作 返回预想的结果 一般来说我们web请求参数是不能直接通过http请求来代码识别的 所以你必须要通过注解
  • 关于上采样方法总结(插值和深度学习)

    一 简介 上采样的技术是图像进行超分辨率的必要步骤 最近看到了CVPR2019有一些关于上采样的文章 所以想着把上采样的方法做一个简单的总结 看了一些文章后 发现上采样大致被总结成了三个类别 1 基于线性插值的上采样 2 基于深度学习的上采
  • 十大经典排序算法动画与解析

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 排序算法是 数据结构与算法 中最基本的算法之一 排序算法可以分为内部排序和外部排序 内部排序是数据记录在内存中进行排序 而外部排序是因排序的数据很大 一次不能容纳全部的排序
  • python画图

    python画图 导入模块numpy 命名为np方便后续使用 import numpy as np numpy可进行数组和矩阵运算 提供大量的数学函数库 import matplotlib pyplot as plt matplotlib是
  • 无向图邻接表的深度优先遍历(DFS)

    邻接表是图的一种链式存储结构 对图的每个顶点建立一个单链表 n个顶点建立n个单链表 头文件 Graph h ifndef GRAPH H define GRAPH H define MAXSIZE 50 typedef char Verte
  • QT+PCL+VS制作点云显示界面(彩色显示xyz点云)

    前言 最近正学习QVTKWidget插件显示点云 参考博文 https blog csdn net wokaowokaowokao12345 article details 51078495 时发现其提供的官方编译样只能例打开XYZRGB的
  • python pip在哪个文件夹运行_python pip源配置,pip配置文件存放位置的方法

    pip源配置文件可以放置的位置 Linux Unix etc pip con pip pip conf 每一个我都找了都没有 所以我是在这个文件夹中创建的pip conf文件 config pip pip conf Mac OSX Libr
  • java自定义findbugs规则_findbugs自定义规则并配置实现检测

    findbugs不过多介绍了 对于这个主题找了一些资料 没有找到一个完整的介绍 要么是介绍怎么写detector 要么就是没有完整的介绍怎么配置生效 下面主要介绍一下怎么配置其生效 至于怎么写这个detector还是有很多资料说明的 不过在