当应用程序需要查询远程系统时,我们经常创建一个“远程”包,并带有一个“实体”子包,其中包含的类将更容易处理我们检索的信息。这些类不应该泄漏出远程包。检查非法进口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