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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

eclipse pmd使用

PMD是非常好的Java代碼掃描程序,可幫助您避免潛在的編程問題。 它可以輕松擴(kuò)展以滿足您的需求,并且本文將為您帶來與JPA的@Enumerated注釋用法相關(guān)的自定義PMD規(guī)則的簡單示例。

在繼續(xù)閱讀之前,您應(yīng)該檢查我以前的文章之一-JPA-@Enumerated default attribute 。 當(dāng)您與一群JPA項(xiàng)目人員一起工作時,幾乎可以肯定,其中一個開發(fā)人員將使用@Enumerated批注而不定義EnumType ,并且如果您不對數(shù)據(jù)庫級別使用嚴(yán)格的數(shù)據(jù)驗(yàn)證(例如列級別約束) ),您將陷入深深的麻煩。

我們想要實(shí)現(xiàn)的是在不使用EnumType的情況下使用@Enumerated報告一個錯誤:

@Entity @Table(name = 'BENEFITS') public class Benefit implements Serializable {...@Column(name = 'BENEFIT_TYPE')@Enumeratedpublic BenefitType getType() {return type;}... }

如果使用@Enumerated和ORDINAL EnumType則發(fā)出警告:

@Entity @Table(name = 'BENEFITS') public class Benefit implements Serializable {...@Column(name = 'BENEFIT_TYPE')@Enumerated(EnumType.ORDINAL)public BenefitType getType() {return type;}... }

我們可以通過兩種方式實(shí)現(xiàn)我們的目標(biāo),要么用Java描述PMD規(guī)則,要么使用XPath-我將在本文中重點(diǎn)介紹第二種方式。

讓我們從頭開始;)–我們必須首先下載PMD (我使用版本4.2.5, pmd-bin-4.2.5.zip ),將其解壓縮到某個位置,將工作目錄更改為解壓縮的PMD目錄,然后運(yùn)行規(guī)則設(shè)計器(可以在./bin/designer.sh中找到)。 您應(yīng)該會看到以下內(nèi)容:

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

在“抽象語法樹”面板的中間,您可能會看到:Annotation / MarkerAnnotation / Name結(jié)構(gòu),對應(yīng)于我們的@Enumerated批注,但未定義EnumType 。 為了匹配它,我們將在XPath表達(dá)式之后放入XPath Query面板:

//MarkerAnnotation/Name[@Image = 'Enumerated']

現(xiàn)在點(diǎn)擊“開始”按鈕時:

您將在右下角的面板中找到找到的匹配項(xiàng):) – XPath查詢正確:)。

現(xiàn)在,當(dāng)我們有了XPath查詢時,我們必須使用它來定義規(guī)則,讓我們打開新的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作為規(guī)則類,并為包含我們的XPath查詢的該規(guī)則定義xpath屬性。 上例中的優(yōu)先級表示:1 –錯誤,高優(yōu)先級,2 –錯誤,正常優(yōu)先級,3 –警告,高優(yōu)先級,4 –警告,正常優(yōu)先級和5 –信息。

我們將向我們的JPA規(guī)則集中添加另一條規(guī)則,當(dāng)@Enumerated與顯式的ORDINAL EnumType一起使用時,它負(fù)責(zé)報告警告–它可以是@Enumerated(EnumType.ORDINAL)或@Enumerated(value = EnumType.ORDINAL) ,因此我們需要現(xiàn)在可以替代兩個XPath表達(dá)式:

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

現(xiàn)在,當(dāng)我們擁有包含這兩個規(guī)則的規(guī)則集時,將其導(dǎo)入到Eclipse IDE中。 在這一點(diǎn)上,我假設(shè)您已經(jīng)安裝了Eclipse的PMD插件(請參閱: PMD –與IDE的集成 )。

打開Eclipse Preferences,找到PMD部分并將其展開,您應(yīng)該看到:

點(diǎn)擊“導(dǎo)入規(guī)則集...”

選擇包含規(guī)則集的文件,選擇是否要通過引用或復(fù)制導(dǎo)入(在這種情況下,您的規(guī)則集名稱將被忽略,并且將使用' pmd-eclipse '名稱),并且您應(yīng)該看到我們的兩個規(guī)則已添加到清單:

在eclipse詢問時執(zhí)行必要的構(gòu)建,然后在開始使用我們的新規(guī)則之前,請檢查項(xiàng)目屬性:

應(yīng)該啟用“啟用PMD”選項(xiàng),以便PMD即時檢查您的代碼,我們新添加的規(guī)則應(yīng)在該項(xiàng)目中處于活動狀態(tài)(默認(rèn)情況下為默認(rèn)狀態(tài))。

讓我們現(xiàn)在寫一些“壞代碼”,匹配我們定義的第一條規(guī)則:

當(dāng)您用鼠標(biāo)將紅色標(biāo)記指向左側(cè)時,您將看到規(guī)則消息,如XML中所定義:

第二條規(guī)則匹配:

和消息,如XML中所定義:

甜點(diǎn)的幾個鏈接:

  • 如何編寫PMD規(guī)則
  • XPath規(guī)則教程
  • 如何制定新的規(guī)則集

參考: 使用我們自己的JCG合作伙伴 Micha 的規(guī)則在Eclipse中自定義PMD ? 術(shù)士思想博客上的Ja?tak。


翻譯自: https://www.javacodegeeks.com/2012/10/customize-pmd-in-eclipse-with-your-own.html

eclipse pmd使用

總結(jié)

以上是生活随笔為你收集整理的eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。