自定义 PMD 规则集是编写符合其 XML Schema 的 ruleset.xml 文件,用于声明启用 / 排除规则、调整参数及过滤路径;不写 Java 代码,仅通过 XML 结构化配置静态分析行为。

定义自定义 PMD 规则集(ruleset.xml)本质是编写一个符合 PMD XML Schema 的 配置文件,用于声明启用哪些规则、排除哪些规则、调整参数、过滤文件路径。它不写 Java 代码,而是通过结构化 XML 精准控制静态分析行为。
基础结构:从最小可运行 ruleset 开始
每个 ruleset.xml 必须包含命名空间和版本声明,并提供描述。最简可用模板如下:
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd”>
注意:name 属性必须唯一且有意义;schemaLocation 链接确保 IDE 和 PMD 能校验语法正确性。
规则引用:按需组合内置规则
PMD 自带大量分类规则(如 codestyle、errorprone、design),推荐优先复用而非重写。两种主流方式:
- 单规则引用:精准启用某一条,适合重点管控项
gory/java/errorprone.xml/EmptyCatchBlock”/> - 整类引用 + 排除特例:高效引入一整套,再剔除不适用的
推荐使用后者管理风格类规则,既保持一致性又保留灵活性。
规则微调:修改阈值或行为参数
许多规则支持属性(properties)定制。例如控制圈复杂度告警门槛:
常见可调属性包括:threshold、violationSuppressRegex、allowCommentedBlocks 等。具体字段需查阅对应规则文档或源码中的 @Property 注解。
文件范围控制:exclude-pattern 与 include-pattern
避免对测试、生成代码、第三方库误报。在 根节点下直接声明:
- 全局排除测试目录:
.*/test/.* - 排除自动生成代码:
.*/generated/.* - 白名单特例(即使在排除路径中也检查):
.*/test/important/.*
匹配基于 正则表达式,路径为相对于项目根的完整路径(含包名),建议用 .* 做前缀后缀通配更稳妥。