agentleFS
hellyguohellyguo/self-ai-spec/skills/java-check-pmd/SKILL.md

java-check-pmd

Skill8 starsChanged 17 days agoApache-2.0View on GitHub

使用 PMD 对 Java 代码做静态分析,检测代码坏味道、编码规范与安全问题。适用于 Java 项目规范检查、CI 质量门禁、代码评审辅助。

The file

Files
SKILL.md

PMD Java静态分析技能

本文件中的 templates/... 均指本技能目录下的 templates/ 子目录。

PMD(Programming Mistake Detector)检测Java代码中的编码规范违规、代码坏味道、潜在缺陷和安全漏洞。

工具位置

PMD_HOME=~/app/pmd-bin-6.19.0
PMD_CLI=$PMD_HOME/bin/run.sh
PMD_RULESETS=${HOME}/open_source/github/pmd/pmd-java/src/main/resources/rulesets

执行流程

步骤1:准备源代码

SRC_DIR=src/main/java  # Maven项目
# 或 SRC_DIR=src       # 标准项目

步骤2:执行PMD分析

# 代码风格检查
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/quickstart.xml -f text -r pmd-style.txt

# 完整质量检查
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/basic.xml,rulesets/java/design.xml -f text -r pmd-quality.txt

# 安全漏洞检查
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/security.xml -f text -r pmd-security.txt

步骤3:自定义规则集

$PMD_CLI pmd -d $SRC_DIR -R custom-ruleset.xml -f text -r pmd-custom.txt
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/basic.xml -R rulesets/java/codeestyle.xml -f text -r pmd-combined.txt

步骤4:重复代码检测(CPD)

$PMD_CLI cpd --minimum-tokens 100 --files $SRC_DIR --language java --format text --fail-on-violation true
$PMD_CLI cpd --minimum-tokens 50 --files $SRC_DIR --language java \
  --format xml --ignore-literals true --ignore-identifiers true

步骤5:分析结果处理

Read templates/result-processing.md

步骤6:增量分析

# 分析特定文件
$PMD_CLI pmd -d src/main/java/com/example/Test.java -R rulesets/java/quickstart.xml -f text

# 分析文件列表
$PMD_CLI pmd -filelist filelist.txt -R rulesets/java/quickstart.xml -f text

常用命令

$PMD_CLI pmd -list                           # 查看所有规则
$PMD_CLI pmd -list -language java            # 查看Java规则
$PMD_CLI pmd -help -language java -rule EmptyCatchBlock  # 查看规则详情
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/quickstart.xml -f text -verbose  # 详细输出
$PMD_CLI pmd -d $SRC_DIR -R rulesets/java/quickstart.xml -f text -debug    # 调试模式

CPD参数

参数描述默认值
--minimum-tokens最小token数100
--language检测语言java
--format输出格式text
--ignore-literals忽略字面量false
--ignore-identifiers忽略标识符false

最佳实践

  1. 渐进式采用:先启用基础规则,逐步增加设计/安全规则,根据团队接受度调整阈值
  2. 规则定制:根据项目特点定制规则集,排除不适用的规则,调整复杂度阈值
  3. 集成策略:开发环境用警告级别,构建环境用错误级别,发布环境严格检查
  4. 团队培训:解释规则含义,提供修复示例,建立代码审查标准

注意事项

  1. 大型项目PMD分析可能较慢,建议增量分析
  2. 部分规则可能有误报,需人工确认
  3. 不同规则可能冲突,需权衡
  4. 确保PMD版本与Java版本兼容

故障排除

问题原因
No files to process源代码路径不正确
Unsupported language语言参数不正确
RuleSetNotFoundException规则集文件不存在

模板引用

模板文件用途
templates/output-formats.md输出格式(text/xml/csv/html)
templates/custom-ruleset.md自定义规则集XML模板
templates/build-integration.mdMaven/Gradle集成配置
templates/rulesets-reference.md规则集速查表(basic/codeestyle/design/security/performance)
templates/result-processing.md结果解析与趋势报告脚本

技能版本: 1.0.0
工具版本: PMD 6.19.0
适用项目: Java 8+ 企业级项目
输出位置: 当前目录下的pmd-*.txt文件

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.