如何在PMD 7.22.0中排除指定包及子包下的类的TooManyFields规则检查
如何在PMD 7.22.0中排除指定包及子包下的类的TooManyFields规则检查
我之前在使用PMD 7.22.0时,遇到了需要让TooManyFields规则跳过指定包(比如dto包)及其所有子包下类的需求,试了网上的一个方案却没生效,后来终于找到了解决办法,在这里分享给大家:
之前的无效尝试
我一开始用了这样的配置,但完全起不到排除的效果:
<rule ref="category/java/design.xml/TooManyFields"> <properties> <property name="violationSuppressXPath" value="//ClassOrInterfaceDeclaration['.*/dto/.*']"/> </properties> </rule>
可行的解决方案
后来参考了相关思路调整了XPath表达式,下面的配置成功实现了需求——不仅能排除dto包,还能同时处理entities包(你可以根据自己的实际需要修改括号内的包名列表):
<rule ref="category/java/design.xml/TooManyFields"> <properties> <property name="violationSuppressXPath" value="//ClassDeclaration[matches(@BinaryName, '\.(dto|entities)\.')]"/> </properties> </rule>
配置说明
这个配置的核心是利用matches(@BinaryName, '\.(dto|entities)\.')匹配类的完整二进制名称(即带完整包路径的类名):
- 只要类的包路径中包含
.dto.或.entities.的片段,就会被TooManyFields规则忽略 - 该表达式会自动覆盖对应包的所有子包,无需额外配置子包路径
备注:内容来源于stack exchange,提问作者wuttke
相关产品推荐
相关产品推荐

