eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD

eclipse pmd使用

PMD是非常好的Java代码扫描程序,可帮助您避免潜在的编程问题。 它可以轻松扩展以满足您的需求,并且本文将为您带来与JPA的@Enumerated注释用法相关的自定义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使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux bash source 0,linux中BASH_SOURCE[0](转)

在C/C中&#xff0c;__FUNCTION__常量记录当前函数的名称。有时候&#xff0c;在日志输出的时候包含这些信息是非常有用的。而在Bash中&#xff0c;同样有这样一个常量FUNCNAME&#xff0c;但是有一点区别是&#xff0c;它是一个数组而非字符串&#xff0c;其中数组的第一个元素…

如何将自定义数据源集成到Apache Spark中

如今&#xff0c;流数据是一个热门话题&#xff0c;而Apache Spark是出色的流框架。 在此博客文章中&#xff0c;我将向您展示如何将自定义数据源集成到Spark中。 Spark Streaming使我们能够从各种来源进行流传输&#xff0c;同时使用相同的简洁API访问数据流&#xff0c;执行…

linux用户管理练习题

转载自&#xff1a;http://blog.sina.com.cn/s/blog_6a8d2f120100qiyj.html 1)新建一个组group1,新建一个系统组group2 参考答案: groupadd group1 groupadd -r group2 cat /etc/group /etc/gshadow|grep group[1-2] 2)更改组group2的GID为103,更改组名为grouptest 参考答案:…

闪念-许久未来一切没变

好久好久没来逛社区了&#xff0c;前几天有空登录进来看看&#xff0c;好多以前的老朋友都还在&#xff0c;甚是欣慰。有种亲切的感觉&#xff0c;时间真的很快&#xff0c;差不多有3-4年没来玩社区了。经历了两家互联网行业级Top3的公司一度没有时间逛社区&#xff0c;玩社区交…

C语言麻将递归,C++数据结构与算法——麻将胡牌算法(二:完全胡牌算法)

虽然单花色胡牌算法面试时写出来了&#xff0c;但是完整的胡牌算法却没有写&#xff0c;既然遇到了&#xff0c;秉着不抛弃不放弃的精神&#xff0c;当然不能原谅懒惰的自己了。下面这篇为一个完整的胡牌算法。胡牌规则除了以下几点&#xff0c;其余与单花色胡牌规则一致&#…

第一行代码-第一章

模拟器和真机切换 点击app选择Configuration&#xff0c;Target选择USB设备或模拟器 真机不能获取debug日志 以360手机为例 1.拨号界面输入“*20121220#”&#xff0c;进入工程模式&#xff0c;点击日志输出等级。 2.修改以下选项 Log print enable 选 enable Java log level 选…

啊哈c语言推箱子小游戏,啊哈C入门版学完了,现发推箱子源代码~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼该推箱子拥有对成绩的记录功能&#xff0c;因此,请挑战自己的最少步数吧&#xff01;源代码如下&#xff1a;#include #include int main(){system("color 0a");char a[9][11]{" ###### "," # ###",…

AIDA64制作机箱副屏/性能监控屏, 刷新慢问题

AIDA64制作机箱副屏/性能监控屏, 刷新慢问题 手上有闲置的手机/平板, 非闲置也行, 毕竟也没人边刷手机边打游戏吧AIDA64可以监控大多数参数, 放到一些酷炫的LCD模板上, 通过手机/平板等的浏览器就可访问这个页面, 实现无线监控 在网上找一个AIDA64, 安装文件-设置-LCD找到Rem…

javaone_JavaOne 2012:Java策略主题演讲和IBM主题演讲

javaone与 JavaOne 2010 相似&#xff0c;我对JavaOne 2012有了一个粗略的起点。由于“计算机和打印机技术上的困难”&#xff0c;办理登机手续的人花了70分钟为我提供JavaOne徽章。 尽管我不是世界上最有耐心的人&#xff0c;但比等待更令人失望的是&#xff0c;我错过了参加“…

常用正则表达式(?i)忽略字母的大小写!

转载自&#xff1a;http://blog.csdn.net/iwanttoknow7/article/details/5773285 1。^/d$  //匹配非负整数&#xff08;正整数 0&#xff09; 2 。 ^ [ 0 - 9 ] * [ 1 - 9 ][ 0 - 9 ] * $   // 匹配正整数 3 。 ^ (( - /d) | ( 0))$   // 匹配非正整数&#xff08;负…

内存刷新机制

red log buffer、data buffer、binlog cache。在O和M中&#xff0c;讲究日志先行策略&#xff0c;就是一条DML语句进入数据库之后&#xff0c;都会先写日志&#xff0c;再写数据文件。 1.red log&#xff0c; 重做日志文件&#xff0c;用于记录事务操作的变化&#xff0c;记录的…

android 字符串对齐,android – 使用Spanable String对齐ImageSpan

我知道有很多相同类型的问题可供使用,我尝试了很多解决方案,但所有这些问题都达不到我的要求.我的问题是我必须在包含Spanable字符串和Imagespan的文本之间添加动态行间距,但是当我添加行间距时,文本和图像的对齐会变形.我已经尝试了Stackoverflow上几乎所有可用的解决方案,如t…

如何将JBoss HR员工奖励项目放入云端

我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 我们从头到尾讨论了各个层&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应用程序开发工具。 到目前为止&#xff0c;您所拥有…

用JIRA管理你的项目

https://blog.csdn.net/gaowenhui2008/article/details/70241657 (一) JIRA环境搭建 转载于:https://www.cnblogs.com/eustoma/p/9637509.html

ArcGIS编辑操作的常用快捷键一览表

在ArcMap中&#xff0c;快捷键与一些编辑工具和命令相关联。使用快捷键能使编辑工作更加快捷有效&#xff0c;总结如下&#xff1a; 一、公共快捷键&#xff08;对所有编辑工具有效&#xff09;&#xff1a; Z&#xff1a;放大 X&#xff1a;缩小 C&#xff1a;漫游 V&#xff…

javaone_JavaOne 2012:使用HTML5和Java构建移动应用程序

javaone我返回了Parc 55 &#xff08;任务会议室&#xff09;&#xff0c;观看Max Katz的&#xff08; Exadel开发人员关系&#xff09;“使用HTML5和Java构建移动应用程序” Bird-of-Feather&#xff08;BoF&#xff09;演示文稿。 具体来说&#xff0c;Katz在Tiggzi &#xf…

android recyclerview 横向item 宽度,RecyclerView的item宽度不能全屏显示及线性布局与grid布局切换混乱解决方法...

1.RecyclerView的Item宽度不能全屏显示出现这种的原因有两种&#xff1a;1.第一种是在adapter中加载inflater时parent传入为null2.如果第一种不行&#xff0c;第二种原因就是在RecyclerView外随意加一层布局即可充满解决方法&#xff0c;在onCreateViewHolder按照如下修改&…

剑指offer(一):二维数组中的查找

题目&#xff1a; 在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否…

sed以及awk的替换命令

转载自&#xff1a;http://blog.csdn.net/imzoer/article/details/8721590 先看sed 的。 比如说&#xff0c; 在上面使用sed替换每行第一个出现的nau为n_a_u。 如果加上g参数&#xff0c;那么对已一行&#xff0c;每次遇到一个nau就要替换一次。 -----------------------------…

图片下载中文传输转义问题

// 定义utf-8转义失败&#xff0c;中文是一串什么3E%什么的 URLEncoder.encode((productName".jpeg"), "UTF-8") // 改成如下代码 new String((productName ".jpeg").getBytes("utf-8"), "ISO8859-1") 转载于:https://www.…