日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用您自己的规则在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中找到)。 您應該會看到以下內容:

讓我們將要分析的代碼放入源代碼面板,然后單擊“執行”按鈕:

在“抽象語法樹”面板的中間,您可能會看到:注釋/ MarkerAnnotation /與未定義EnumType的 @Enumerated注釋相對應的Name結構。 為了匹配它,我們將在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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。