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使用

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

  1. 使用您自己的规则在Eclipse中自定义PMD

    PMD是非常好的Java代码扫描程序,可帮助您避免潜在的编程问题. 它可以轻松扩展以满足您的需求,并且本文将为您带来与JPA的@Enumerated注释用法相关的自定义PMD规则的简单示例. 在继续阅 ...

  2. eclipse使用教程_使用此首选项可加快Eclipse m2e配置

    eclipse使用教程 谁不认识他们. Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件. 对于m2e,它看起来像这样: 不幸的是,该屏幕的加载速度有点慢 ...

  3. eclipse没有日志_技术进展 | 加强公共DHT抵抗eclipse攻击!

    导语 随着网络规模的不断扩大,2020年IPFS的一个主要重点是改进内容路由.虽然我们已经对 DHT 上的请求速度做出了重大改进,但我们的另一个关键关注点是网络的安全性.在发布 go-ipfs 0.5 ...

  4. eclipse m2e配置_使用此首选项可加快Eclipse m2e配置

    eclipse m2e配置 谁不认识他们. Eclipse中的旧式JFace对话框可以使您直观地看到实际上是一个相当简单的XML或属性文件. 对于m2e,它看起来像这样: 不幸的是,此屏幕的加载速度有 ...

  5. eclipse 隐藏项目_前5个有用的隐藏Eclipse功能

    eclipse 隐藏项目 Eclipse是野兽. 仅凭其力量才能超越其神秘感的设备. 有人将其称为连续体跨功能器 . 其他人则称它为透湿器 . 是的,它是如此之大,需要花费数年才能掌握. 然后,您的经 ...

  6. eclipse 64位_如何安装调试 Java开发工具Eclipse和JDK环境

    JRE是个运行环境,JDK是个开发环境.因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE.而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常 ...

  7. access的papersize命令_终于部分解决了.NET Drawing.Printing中自定义PaperSize的问题

    折磨我一周的问题总算解决了 现在项目需要打印各种帐单 打印机都是LQ-1600KIII针式打印机 因为每种账单大小不同,主要是纸高度不同 所以要控制打印一张的打印机卷纸长度 最开始这样设置 print ...

  8. eclipse使用技巧_有效使用Eclipse的热门技巧

    eclipse使用技巧 以下是一些技巧,可以帮助您避免潜在的问题并在使用Eclipse时提高工作效率. 避免安装问题 切勿在旧版本之上安装新版本的Eclipse. 首先重命名旧版本,以将其移开,然后将 ...

  9. [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量安装eclipse

    一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...

最新文章

  1. 一键将Word转换为MarkDown
  2. redis伪集群脚本
  3. jboss eap 7_EAP 7 Alpha和Java EE 7入门
  4. 请教如何保存matlab仿真出来的图,如何保存Matlab绘制出来的图像
  5. 计算机快捷键m是什么,教程方法;m、ac快捷键电脑技巧-琪琪词资源网
  6. ViewPager 中添加监听
  7. 【王道计组笔记】数制、编码、校验
  8. Implement Trie (Prefix Tree)
  9. c/c++学习系列之memset()函数
  10. cc2530c语言教程,cc2530程序设计实例之CC2530 RF部分使用—实现点对点收发 - 全文...
  11. docker部署java项目_JAVA项目如何通过Docker实现持续部署
  12. AutoCAD2012官方原版软件下载
  13. arcgis engine 打开shp文件
  14. 如何连接mac与无线打印机?
  15. 微信公众号获取用户位置信息
  16. Echarts之Pie (一)
  17. 微信小程序开发4——利用自定义组件实现页面内容切换功能
  18. rtx服务器修改登录端口,rtx服务器地址端口设置
  19. 微信小程序截屏保存图片
  20. Matplotlib——散点图_多种自定义

热门文章

  1. Java 进程间文件锁FileLock详解
  2. 服务降级的概念及应用手段
  3. 今天你们表现的真棒!!!
  4. 使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
  5. 你们也只剩下点赞的交情
  6. Linux基本目录解释
  7. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  8. hadoop fs -ls / 出现WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform
  9. Java的不同进制输出,[DanoR][Java小码][进制转换::将double转换为不同进制后用String输出]...
  10. maven项目 报错 java.lang.ClassNotFoundException: org.springframework.web.filter.HiddenHttpMethodFilter