# @codacy/tools-pmd-7 中文文档

规范地址：https://npmcn.com/package/%40codacy/tools-pmd-7/

版本：0\.28\.0
npm 元数据更新时间：2026-11-09T13:47:14.217Z
中文译文更新时间：2026-11-10T05:46:39.625Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40codacy/tools-pmd-7
原文对照：https://npmcn.com/package/%40codacy/tools-pmd-7/?lang=original
项目主页：https://github.com/codacy/analysis-cli
源码仓库：https://github.com/codacy/analysis-cli

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：161 kB，7 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20\.0\.0
- 运行依赖：1 个
- 首次发布：2026-03-24T13:16:02.946Z
- 最新版本发布：2026-11-09T13:47:14.028Z
- 近 30 天下载量：11736（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：36（近 12 个月 36 个）

## 中文简介

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

## 安装

```sh
npm install @codacy/tools-pmd-7
```

也可以使用：`pnpm add @codacy/tools-pmd-7`、`yarn add @codacy/tools-pmd-7`、`bun add @codacy/tools-pmd-7`

## README

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

## 目录

-   [概览](https://npmcn.com/package/%40codacy/tools-pmd-7/#readme-overview)
-   [更新图案](https://npmcn.com/package/%40codacy/tools-pmd-7/#readme-updating-patterns)
-   [更新 PMD 版本](https://npmcn.com/package/%40codacy/tools-pmd-7/#readme-updating-the-pmd-version)
-   [发展](https://npmcn.com/package/%40codacy/tools-pmd-7/#readme-development)
-   [维护者的注释](https://npmcn.com/package/%40codacy/tools-pmd-7/#readme-notes-for-maintainers)

* * *

## 概览

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

| 财产 | 数值 |
| --- | --- |
| 工具标识 | `PMD7` |
| 编码 UUID | `ed7e8287-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` |

## 更新图案

```bash
# 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/`(中文(简体) )

## 发展

```bash
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](https://github.com/pmd/pmd/releases) 添加 `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 是什么？

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 和提交记录判断。

