2017-04-07 74 views
1

當應用程序需要查詢遠程系統時,我們經常創建一個「遠程」包,並帶有一個「實體」子包,其中包含的類將更容易處理我們檢索的信息。這些類不應該泄漏出遠程包。檢查非法進口remote.entities遠程包

是否有任何規則可用(或正在研究中)檢查是否在x.y.remote包之外導入x.y.remote.entities?

+0

相關性矩陣視圖本來的好幫助,這可惜這個功能被刪除在最新版本的 – Coc

回答

1

從您的問題標籤中,我發現基於Checkstyle的解決方案對您也有幫助。 ImportControl檢查應該只是你需要的。如果您需要,Checkstyle還具有SonarQube plugin

+0

當然,ImportControl規則有助於檢查禁止的類的使用情況。但是這個規則也會引發對x.y.remote包中使用的x.y.remote.entities的違反。有關如何配置此規則來檢查x.y.remote包之外的使用情況,但不在裏面的任何想法。 – Coc

1

S3688被添加到SonarJava 4.4中,完全禁止使用某些類。在它的表面上,這是行不通的,因爲想要允許在某些包中使用這些類。這就是Issue Exclusions進來。

您可以設定規則來禁止使用的x.y.remote.entities(通用),然後建立一個排除忽略來自該規則在x.y.remote上的任何內容提出的問題。

+0

這個規則看起來挺有意思的進一步調查。但是自從哪個版本的Java是可用的這個規則。我們正在使用Java 3.9,但我無法找到這個規則。 – Coc

+0

請參閱我的編輯@Coc。順便說一句,你應該考慮升級。 3.9已經超過一歲了。自那時以來,已經有許多改進。當前版本是4.8。 –

0

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的

+0

我不確定編寫規則來實現我們的方案是多麼容易。我會試一試,並在需要時回覆您的澄清。再次感謝您的答覆。 – Coc