Java 正在检查远程包外部的remote.entities的非法导入

Java 正在检查远程包外部的remote.entities的非法导入,java,sonarqube,checkstyle,findbugs,pmd,Java,Sonarqube,Checkstyle,Findbugs,Pmd,当应用程序需要查询远程系统时,我们通常会创建一个“远程”包,其中包含一个“实体”子包,其中包含更容易处理我们检索的信息的类。这些类不应该从远程包泄漏出去 是否有任何规则可用于(或正在研究)检查是否将x.y.remote.entities导入x.y.remote包之外?添加到Java 4.4中,以完全禁止使用某些类。表面上看,这是行不通的,因为您确实希望允许在某些包中使用这些类。那就是我进来的地方 您将设置规则以禁止使用x.y.remote.entities(通用),然后设置排除以忽略该规则中针对

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

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

添加到Java 4.4中,以完全禁止使用某些类。表面上看,这是行不通的,因为您确实希望允许在某些包中使用这些类。那就是我进来的地方


您将设置规则以禁止使用
x.y.remote.entities
(通用),然后设置排除以忽略该规则中针对问题标签中
x.y.remote

中的任何内容提出的问题,我认为基于检查样式的解决方案也会对您有所帮助。支票应该正是你需要的。Checkstyle还具有一个您需要的功能。

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>

不应在远程包外部导入远程实体
3.
//ImportDeclaration/Name[包含(@Image,.entities')和//PackageDeclaration/Name[不包含(@Image,.remote'))]]

请注意,目前的规则允许从任何远程包导入所有实体,但是,您可能需要迭代此规则以尽可能缩小其范围。

Sonarqube早期版本中的依赖关系矩阵视图在这方面会有很大帮助,但不幸的是,此功能在最近的版本中被删除。当然,ImportControl规则有助于检查禁止的类使用。但该规则也会对x.y.remote包中使用的x.y.remote.entities引发冲突。关于如何配置此规则以仅检查x.y.remote软件包外部的使用情况而不检查内部的使用情况的任何想法。此规则看起来很有趣,需要进一步研究。但这条规则适用于哪个版本的Java。我们正在使用Java 3.9,但我无法找到此规则。请参阅我的编辑@Coc。顺便说一下,你应该考虑升级。3.9岁已经超过一岁了。自那时以来,已经作出了许多改进。目前的版本是4.8。我不确定编写一个规则来实现我们的场景有多容易。我会尝试一下,如果需要的话,会给你回复澄清。再次感谢你的回答。