检查远程包外的remote.entities的非法导入

时间:2017-04-07 11:35:08

标签: java sonarqube checkstyle findbugs pmd

当应用程序需要查询远程系统时,我们经常创建一个“远程”包,其中包含一个“实体”子包,这些包将更容易处理我们检索的信息。这些类不应泄漏出远程包。

是否有任何规则(或正在研究中)检查是否在x.y.remote包之外导入x.y.remote.entities?

3 个答案:

答案 0 :(得分:1)

在SonarJava 4.4中添加了

S3688以完全禁止使用某些类。从表面上看,这不起作用,因为你想允许在某些包中使用这些类。这就是Issue Exclusions进来的地方。

您将设置规则以禁止使用x.y.remote.entities(普遍),然后设置排除项,以忽略针对x.y.remote中任何内容提出的规则的问题。

答案 1 :(得分:1)

从问题标签中,我发现基于Checkstyle的解决方案对您也很有帮助。 ImportControl检查应该是您需要的。如果您需要,Checkstyle还会显示SonarQube plugin

答案 2 :(得分: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您可以迭代此规则以尽可能缩小范围。