@codacy/tools-pmd-7

中文文档
0.28.0发布于 2026/11/09MITTypeScriptCommonJS近 30 天下载 1.2万

PMD 7 适配器——CLI-mode多语言静态分析器

中文使用文档
文档目录6 节
  1. 目录
  2. 概览
  3. 更新图案
  4. 更新 PMD 版本
  5. 发展
  6. 维护者的注释

@codacy/tools-pmd-7 (英语)

目录


概览

多语种静态分析工具 PMD 主题 CLI(英语:CLI). 使用 CLI 执行策略 -- -- 通过生成 PMD shell 脚本 spawnTool() 并分析它的 JSON 输出.

财产数值
工具标识PMD7
编码 UUIDed7e8287-707d-485a-a0cb-e211004432c2
战略国 际
语文Java, Javascript, Kotlin, Swift, PLSQL, XML, Apex, 速度, 视觉力量, JSP
二进制pmd (贝壳脚本出自PMD发行拉链)
文件图案**/*.java, (中文(简体) ), **/*.js, (中文(简体) ), **/*.jsx, (中文(简体) ), **/*.kt, (中文(简体) ), **/*.kts, (中文(简体) ), **/*.swift, (中文(简体) ), **/*.sql, (中文(简体) ), **/*.pls, (中文(简体) ), **/*.plb, (中文(简体) ), **/*.pkb, (中文(简体) ), **/*.pks, (中文(简体) ), **/*.xml, (中文(简体) ), **/*.pom, (中文(简体) ), **/*.wsdl, (中文(简体) ), **/*.xsl, (中文(简体) ), **/*.cls, (中文(简体) ), **/*.trigger, (中文(简体) ), **/*.vm, (中文(简体) ), **/*.page, (中文(简体) ), **/*.component, (中文(简体) ), **/*.jsp

更新图案

# Re-fetch pattern metadata from the Codacy API
pnpm prefetch

# Commit the result
git add src/patterns.json

模式 ID 遵循格式 PMD7_category_{lang}_{categoryDir}_{RuleName},比如说. PMD7_category_java_errorprone_EmptyCatchBlock。 。 。 .

更新 PMD 版本

  1. 更新 PMD_VERSION 内 src/adapter.ts
  2. 更新 PMD_DOWNLOAD_URL 财务报告和审定财务报表 PMD_EXTRACTED_DIR 常数相应
  3. 运行 pnpm prefetch 以检查新的/撤消的规则
  4. 运行 pnpm test 以验证兼容性
  5. 如果主要版本更改,请创建新的适配软件包(pmd-8/(中文(简体) )

发展

pnpm build    # Build with tsup
pnpm test     # Run tests (requires Java + PMD in PATH or installed)

在本地安装 PMD 供测试,下载自 https://github.com/pmd/pmd/放行 互联网档案馆的存檔,存档日期2013-12-21 添加 bin/ 去你的路径。 Java 8+是必需的.

维护者的注释

  • 预设绘图src/pattern-mappings.json(中文(简体) ):形状与PMD 6相同,上游为一 区别很重要。 PMD 7 更名为 JUnit* 最佳做法规则 UnitTest* 将制作 他们的试验框架是不可知的,所以他们声称: junit, (中文(简体) ), junit-5 财务报告和审定财务报表 testng, (中文(简体) ), 而仍然是JULU-version特定的规则则分别到一键. jakarta-ee 覆盖 eJB规则,以及两个Apache Commons规则使用自己的标记(lib:apache-commons-logging, (中文(简体) ), lib:apache-commons-fileupload) (中文(简体) ). 那个重名正是漂移的 packages/runner/test/mapping-drift.test.ts 存在以抓取——从 PMD 6 复制的前缀 和这里没有匹配 并沉默地失败.

    测试框钥匙门打开 lib:junit 编号 : lib:junit-5 编号 : lib:testng 标记, 不打开 前缀这是刻意的 PMD更名这个家庭 比任何其他家庭,所以 前缀列表是长期漂移负债。 它已经发生过两次。 第一次是... . . . JUnit* → UnitTest* 重命名以上。 第二个是 JUnit5TestShouldBePackagePrivate → JUnitJupiterTestShouldBePackagePrivate沉默地杀死了 PMD7_category_java_bestpractices_JUnit5 前缀和整个前缀 junit-5 关卡 规则。 标记取出框架而不是规则,所以两者都活了下来. 前缀 仍然对 jakarta-ee他的EJB规则没有标签.

    侦测必须学会 spring-boot-starter-test (将J单元5推向中转并且是) spring项目中只有一份测试声明 junit-jupiter-编号 :junit-platform- 每个角色的文物,和格拉德的 testRuntimeOnly 动词——没有这些,标出这些 每一次"春靴"重播 默认规则都会失去.

  • PMD要求Java 8+作为运行时间. 适配器使用 ensureJre() 从 @codacy/tooling 如果系统上找不到合适的Java, 可下载 Adoplium Temurin JDK 21.

  • PMD发行版作为拉链从GitHub发布后被下载并提取到 toolInstallDir/pmd-bin-{version}/。 。 。 .

  • 这个 JAVA_HOME 如果使用非系统 Java 二进制,则在引用 PMD 时设置环境变量 .

  • PMD 的 JSON 输出格式提供 beginline编号 :begincolumn编号 :endline编号 :endcolumn,所有基于1。 无需改划.

  • PMD优先(1-5, 1=最高)地图到数值置信度:1-2->3 (高),3->2 (中),4-5->1 (低).

  • 规则参考映射模式 ID : PMD7_category_java_errorprone_EmptyCatchBlock - > (中文) category/java/errorprone.xml/EmptyCatchBlock。 。 。 .

  • 配置文件检测支持 ruleset.xml 财务报告和审定财务报表 apex-ruleset.xml 在寄存器根中.

  • 当指定图案时,生成的规则片 XML 会被写入生成的配置目录,并通过 -R。 。 。 .

  • 当未指定模式或本地配置时, PMD 随内置运行 rulesets/java/quickstart.xml。 。 。 .

  • 这个 --no-fail-on-violation 旗帜确保 PMD 即使在发现违反时也退出 0 .

  • 这个 --file-list 选项用于通过临时文件而不是命令行参数传递目标文件,避免参数长度限制.

  • 高速部队主线行走. PMD 默认为每个核心一线程, 但其速度 模块(pmd-velocity 编号 : VtlParser)在parses之间共享 Apache 高速运行状态,所以两个 .vm 文件同时分析对方的 AST 。 共同结果是 安静 错了 报告——错误地归属于其他文件,幽灵文件条目, IndexOutOfBoundsException 每份档案中,大多数调查结果被撤销(衡量:0/6次 三次多行跑 12次 .vm files, 相对一个稳定的84个单行径). 有时 也挂起: 报告损坏的节点抛出 AssertionError: Root of the tree should implement RootNode,一个 Error 那个 RuleApplicator 不恢复,它杀死 main 内部 MultiThreadProcessor.close()。 。 。 . close() 已经 关闭自己的游泳池——漏水是PMD建造的 每个语文一个集合 和附件 代码永远不会关闭其他人,所以他们的非守护者 PmdThread 工人们停在地上 DestroyJavaVM 永远,而完整的报告 却被不读到.

  • 旗帜是 --threads 0没有 1。 。 。 . 只有零选择 PMD 的 MonoThreadProcessor 创建 完全没有工人池(其日志线变为 Using main thread for analysis) (中文(简体) ). --threads 1 还是 养活了一个非恶魔工人 足以避免极速腐败 但绞刑会留下 可以通过任何其他规则实现 Error发出字节相同的报告,所以零是 免费. requiresSingleThread() 当路由文件的扩展名在 THREAD_UNSAFE_EXTENSIONS (今天刚刚) .vm); 不高速重置, 保留多线程的 PMD,以及 PMD 6 没有这个错误。 上游环境为 docs/tech-debt.md。 。 。 .

  • 扩展检查必须匹配跑道的路由器. requiresSingleThread() 故意这样做 不使用 path.extname返回时 "" 用于一个其基本名称准确的文件 .vm - 跑者 - 跑者 - 跑者 所以警卫也得看看.

  • 跑者每个工具的超时只是 AbortSignal (外加一~2s硬回放的优等; ctx.signal 转至 spawnTool 所以一个被吊死的PMD实际上是被杀死的,而不是作为孤儿JVM而留下的. 因为 analyze() 解析而不是拒绝,此处报告中止为 kind: "Timeout" —— 说 只有适配器拒绝时 跑者才有自己的分类.

  • 处理错误( 无法解析的文件) 被映射到 AnalysisError 带有“警告”级别.

  • 配置错误(无效规则)被映射到 AnalysisError 带有“警告”级别.

版本与发布记录

@codacy/tools-pmd-7 共发布 36 个版本,首次发布于 2026/03/24;过去 12 个月发布了 36 个版本。

版本发布日期距今
0.28.0latest2026/11/09今天
0.27.12026/11/054 天前
0.27.02026/11/036 天前
0.26.02026/10/3010 天前
0.25.02026/10/1921 天前
0.24.02026/09/251 个月前

关于 @codacy/tools-pmd-7 的常见问题

@codacy/tools-pmd-7 是什么?

PMD 7 适配器——CLI-mode多语言静态分析器

如何安装 @codacy/tools-pmd-7?

在项目目录运行 npm install @codacy/tools-pmd-7,或使用 pnpm add / yarn add / bun add。

@codacy/tools-pmd-7 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@codacy/tools-pmd-7 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@codacy/tools-pmd-7 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@codacy/tools-pmd-7 可以商用吗?

@codacy/tools-pmd-7 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@codacy/tools-pmd-7 的下载量有多少?

根据 npm 官方下载统计,@codacy/tools-pmd-7 在 2026/10/10 – 2026/11/08 这 30 天内被下载 11,736 次,日均约 391 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@codacy/tools-pmd-7 还在维护吗?

最新版本 0.28.0 发布于 2026/11/09(今天);至今共发布 36 个版本,其中过去 12 个月发布了 36 个;首次发布于 2026/03/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。