eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD
eclipse pmd使用
在继续阅读之前,您应该检查我以前的文章之一-JPA-@Enumerated default attribute 。 当您与一群JPA项目人员一起工作时,几乎可以肯定,其中一个开发人员将使用@Enumerated批注而不定义EnumType ,并且如果您不对数据库级别使用严格的数据验证(例如列级别约束) ),您将陷入深深的麻烦。
我们想要实现的是在不使用EnumType的情况下使用@Enumerated报告一个错误:
@Entity
@Table(name = 'BENEFITS')
public class Benefit implements Serializable {...@Column(name = 'BENEFIT_TYPE')@Enumeratedpublic BenefitType getType() {return type;}...
}
如果使用@Enumerated和ORDINAL EnumType则发出警告:
@Entity
@Table(name = 'BENEFITS')
public class Benefit implements Serializable {...@Column(name = 'BENEFIT_TYPE')@Enumerated(EnumType.ORDINAL)public BenefitType getType() {return type;}...
}
我们可以通过两种方式实现我们的目标,要么用Java描述PMD规则,要么使用XPath-我将在本文中重点介绍第二种方式。
让我们从头开始;)–我们必须首先下载PMD (我使用版本4.2.5, pmd-bin-4.2.5.zip ),将其解压缩到某个位置,将工作目录更改为解压缩的PMD目录,然后运行规则设计器(可以在./bin/designer.sh中找到)。 您应该会看到以下内容:
让我们将要分析的代码放入源代码面板,然后单击“执行”按钮:
在“抽象语法树”面板的中间,您可能会看到:Annotation / MarkerAnnotation / Name结构,对应于我们的@Enumerated批注,但未定义EnumType 。 为了匹配它,我们将在XPath表达式之后放入XPath Query面板:
//MarkerAnnotation/Name[@Image = 'Enumerated']
现在点击“开始”按钮时:
您将在右下角的面板中找到找到的匹配项:) – XPath查询正确:)。
现在,当我们有了XPath查询时,我们必须使用它来定义规则,让我们打开新的XML文件,将其命名为jpa-ruleset.xml ,并放入其中:
<ruleset name='JPA ruleset'xmlns='http://pmd.sf.net/ruleset/1.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd'xsi:noNamespaceSchemaLocation='http://pmd.sf.net/ruleset_xml_schema.xsd'><description>JPA ruleset</description><rule name='AvoidDefaultEnumeratedValue' message='By default @Enumerated will use the ordinal.' class='net.sourceforge.pmd.rules.XPathRule'><priority>2</priority><properties><property name='xpath' value='//MarkerAnnotation/Name[@Image = 'Enumerated']' /></properties></rule>
</ruleset>
如您所见,我们使用net.sourceforge.pmd.rules.XPathRule作为规则类,并为包含我们的XPath查询的该规则定义xpath属性。 上例中的优先级表示:1 –错误,高优先级,2 –错误,正常优先级,3 –警告,高优先级,4 –警告,正常优先级和5 –信息。
我们将向我们的JPA规则集中添加另一条规则,当@Enumerated与显式的ORDINAL EnumType一起使用时,它负责报告警告–它可以是@Enumerated(EnumType.ORDINAL)或@Enumerated(value = EnumType.ORDINAL) ,因此我们需要现在可以替代两个XPath表达式:
<rule name='EnumeratedAsOrdinal' message='Enumeration constants shouldn''t be persisted using ordinal.' class='net.sourceforge.pmd.rules.XPathRule'><priority>4</priority><properties><property name='xpath' value='//SingleMemberAnnotation/Name[@Image = 'Enumerated']/following-sibling::MemberValue//Name[@Image = 'EnumType.ORDINAL'] |//NormalAnnotation/Name[@Image = 'Enumerated']/following-sibling::MemberValuePairs/MemberValuePair[@Image = 'value']//Name[@Image = 'EnumType.ORDINAL']' /></properties></rule>
现在,当我们拥有包含这两个规则的规则集时,将其导入到Eclipse IDE中。 在这一点上,我假设您已经安装了Eclipse的PMD插件(请参阅: PMD –与IDE的集成 )。
打开Eclipse Preferences,找到PMD部分并将其展开,您应该看到:
点击“导入规则集...”
选择包含规则集的文件,选择是否要通过引用或复制导入(在这种情况下,您的规则集名称将被忽略,并且将使用' pmd-eclipse '名称),并且您应该看到我们的两个规则已添加到清单:
在eclipse询问时执行必要的构建,然后在开始使用我们的新规则之前,请检查项目属性:
应该启用“启用PMD”选项,以便PMD即时检查您的代码,我们新添加的规则应在该项目中处于活动状态(默认情况下为默认状态)。
让我们现在写一些“坏代码”,匹配我们定义的第一条规则:
当您用鼠标将红色标记指向左侧时,您将看到规则消息,如XML中所定义:
第二条规则匹配:
和消息,如XML中所定义:
甜点的几个链接:
- 如何编写PMD规则
- XPath规则教程
- 如何制定新的规则集
参考: 使用我们自己的JCG合作伙伴 Micha 的规则在Eclipse中自定义PMD ? 术士思想博客上的Ja?tak。
翻译自: https://www.javacodegeeks.com/2012/10/customize-pmd-in-eclipse-with-your-own.html
eclipse pmd使用
eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD相关推荐
- 使用您自己的规则在Eclipse中自定义PMD
PMD是非常好的Java代码扫描程序,可帮助您避免潜在的编程问题. 它可以轻松扩展以满足您的需求,并且本文将为您带来与JPA的@Enumerated注释用法相关的自定义PMD规则的简单示例. 在继续阅 ...
- eclipse使用教程_使用此首选项可加快Eclipse m2e配置
eclipse使用教程 谁不认识他们. Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件. 对于m2e,它看起来像这样: 不幸的是,该屏幕的加载速度有点慢 ...
- eclipse没有日志_技术进展 | 加强公共DHT抵抗eclipse攻击!
导语 随着网络规模的不断扩大,2020年IPFS的一个主要重点是改进内容路由.虽然我们已经对 DHT 上的请求速度做出了重大改进,但我们的另一个关键关注点是网络的安全性.在发布 go-ipfs 0.5 ...
- eclipse m2e配置_使用此首选项可加快Eclipse m2e配置
eclipse m2e配置 谁不认识他们. Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件. 对于m2e,它看起来像这样: 不幸的是,此屏幕的加载速度有 ...
- eclipse 隐藏项目_前5个有用的隐藏Eclipse功能
eclipse 隐藏项目 Eclipse是野兽. 仅凭其力量才能超越其神秘感的设备. 有人将其称为连续体跨功能器 . 其他人则称它为透湿器 . 是的,它是如此之大,需要花费数年才能掌握. 然后,您的经 ...
- eclipse 64位_如何安装调试 Java开发工具Eclipse和JDK环境
JRE是个运行环境,JDK是个开发环境.因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE.而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常 ...
- access的papersize命令_终于部分解决了.NET Drawing.Printing中自定义PaperSize的问题
折磨我一周的问题总算解决了 现在项目需要打印各种帐单 打印机都是LQ-1600KIII针式打印机 因为每种账单大小不同,主要是纸高度不同 所以要控制打印一张的打印机卷纸长度 最开始这样设置 print ...
- eclipse使用技巧_有效使用Eclipse的热门技巧
eclipse使用技巧 以下是一些技巧,可以帮助您避免潜在的问题并在使用Eclipse时提高工作效率. 避免安装问题 切勿在旧版本之上安装新版本的Eclipse. 首先重命名旧版本,以将其移开,然后将 ...
- [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量安装eclipse
一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...
最新文章
- 一键将Word转换为MarkDown
- redis伪集群脚本
- jboss eap 7_EAP 7 Alpha和Java EE 7入门
- 请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像
- 计算机快捷键m是什么,教程方法;m、ac快捷键电脑技巧-琪琪词资源网
- ViewPager 中添加监听
- 【王道计组笔记】数制、编码、校验
- Implement Trie (Prefix Tree)
- c/c++学习系列之memset()函数
- cc2530c语言教程,cc2530程序设计实例之CC2530 RF部分使用—实现点对点收发 - 全文...
- docker部署java项目_JAVA项目如何通过Docker实现持续部署
- AutoCAD2012官方原版软件下载
- arcgis engine 打开shp文件
- 如何连接mac与无线打印机?
- 微信公众号获取用户位置信息
- Echarts之Pie (一)
- 微信小程序开发4——利用自定义组件实现页面内容切换功能
- rtx服务器修改登录端口,rtx服务器地址端口设置
- 微信小程序截屏保存图片
- Matplotlib——散点图_多种自定义
热门文章
- Java 进程间文件锁FileLock详解
- 服务降级的概念及应用手段
- 今天你们表现的真棒!!!
- 使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
- 你们也只剩下点赞的交情
- Linux基本目录解释
- Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
- hadoop fs -ls / 出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform
- Java的不同进制输出,[DanoR][Java小码][进制转换::将double转换为不同进制后用String输出]...
- maven项目 报错 java.lang.ClassNotFoundException: org.springframework.web.filter.HiddenHttpMethodFilter