當應用程序需要查詢遠程系統時,我們經常創建一個「遠程」包,並帶有一個「實體」子包,其中包含的類將更容易處理我們檢索的信息。這些類不應該泄漏出遠程包。檢查非法進口remote.entities遠程包
是否有任何規則可用(或正在研究中)檢查是否在x.y.remote包之外導入x.y.remote.entities?
當應用程序需要查詢遠程系統時,我們經常創建一個「遠程」包,並帶有一個「實體」子包,其中包含的類將更容易處理我們檢索的信息。這些類不應該泄漏出遠程包。檢查非法進口remote.entities遠程包
是否有任何規則可用(或正在研究中)檢查是否在x.y.remote包之外導入x.y.remote.entities?
從您的問題標籤中,我發現基於Checkstyle的解決方案對您也有幫助。 ImportControl檢查應該只是你需要的。如果您需要,Checkstyle還具有SonarQube plugin。
當然,ImportControl規則有助於檢查禁止的類的使用情況。但是這個規則也會引發對x.y.remote包中使用的x.y.remote.entities的違反。有關如何配置此規則來檢查x.y.remote包之外的使用情況,但不在裏面的任何想法。 – Coc
S3688被添加到SonarJava 4.4中,完全禁止使用某些類。在它的表面上,這是行不通的,因爲做想要允許在某些包中使用這些類。這就是Issue Exclusions進來。
您可以設定規則來禁止使用的x.y.remote.entities
(通用),然後建立一個排除忽略來自該規則在x.y.remote
上的任何內容提出的問題。
這個規則看起來挺有意思的進一步調查。但是自從哪個版本的Java是可用的這個規則。我們正在使用Java 3.9,但我無法找到這個規則。 – Coc
請參閱我的編輯@Coc。順便說一句,你應該考慮升級。 3.9已經超過一歲了。自那時以來,已經有許多改進。當前版本是4.8。 –
PMD的主要優點之一是,它可以通過編寫簡單的XPath表達式,輕鬆編寫非常特定於給定項目/團隊的自定義規則,就像這一個一樣。
在規則集的XML文件,只需添加您的自定義規則如下:
<rule name="Remote entities used outside remote package"
message="The remote entities should not be imported outside the remote package"
class="net.sourceforge.pmd.lang.rule.XPathRule"
language="java">
<description>
Remote entities should not be imported outside the remote package
</description>
<priority>3</priority>
<properties>
<property name="xpath">
<value>
//ImportDeclaration/Name[contains(@Image, '.entities') and //PackageDeclaration/Name[not(contains(@Image, '.remote'))]]
</value>
</property>
</properties>
</rule>
注意,因爲它代表允許從任何遠程包被導入的所有實體規則,但using the designer你很可能重複這一規則儘可能多地縮小它的範圍。在早期版本的Sonarqube的
我不確定編寫規則來實現我們的方案是多麼容易。我會試一試,並在需要時回覆您的澄清。再次感謝您的答覆。 – Coc
相關性矩陣視圖本來的好幫助,這可惜這個功能被刪除在最新版本的 – Coc