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

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










