[BUG] Bundled PMD 7.25.0 cannot load custom rulesets referencing PMD 7.26.0 rules — one unresolvable ref disables the whole ruleset
还没有人认领这个 Issue。
- #480 来自 @nikhil-mittal-165 —— 已关闭,未合并
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- java, typescript
- 领域
- devtools, testing-qa
调研方向
从 @salesforce/code-analyzer-pmd-engine 0.43.0 及其 dist/java-lib/ 中的 PMD jar 开始,然后跟踪捆绑依赖项和自定义规则集的加载路径。使用提供的 my-rules.xml、code-analyzer.yml 和 sf code-analyzer 命令重现问题。完成标准是受支持的 PMD 版本为当前版本,并且无法解析的规则会报告捆绑版本,同时不会静默掩盖另一个请求的行为。
由索引模型根据 Issue 内容生成。
描述
Description
A custom PMD ruleset that references a standard rule added in PMD 7.26.0 (for example category/apex/errorprone.xml/InvocableClassNoArgConstructor, added 2026-06-29) cannot be loaded by Code Analyzer, because the plugin's bundled PMD engine is still 7.25.0 — and one unresolvable rule reference fails the load of the entire ruleset, so every other rule in the file silently stops running too.
There is currently no way for a user to fix this on their side: the PMD jars ship inside @salesforce/code-analyzer-pmd-engine (dist/java-lib/pmd-apex-7.25.0.jar in engine 0.43.0, the latest) and there is no supported way to point the pmd engine at newer jars.
Steps To Reproduce
(Prerequisites: Salesforce CLI and Java, the standard Code Analyzer requirements. Steps verified end-to-end in an empty directory.)
sf plugins install code-analyzer(installscode-analyzer 5.14.0, the current latest, which resolves@salesforce/[email protected]).- In an empty directory, create
src/Sample.cls:
public class Sample {
public static void log() {
System.debug('hello');
}
}
- Create
my-rules.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Repro"
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>One rule from PMD 7.26.0 plus one custom XPath rule.</description>
<rule ref="category/apex/errorprone.xml/InvocableClassNoArgConstructor"/>
<rule name="MyOtherRule" language="apex" message="demo"
class="net.sourceforge.pmd.lang.rule.xpath.XPathRule">
<description>demo</description>
<priority>3</priority>
<properties>
<property name="xpath"><value>//MethodCallExpression[lower-case(@FullMethodName) = 'system.debug']</value></property>
</properties>
</rule>
</ruleset>
- Create
code-analyzer.yml:
engines:
pmd:
custom_rulesets:
- my-rules.xml
sf code-analyzer run --workspace src --rule-selector pmd --config-file code-analyzer.yml
Expected Behavior
Either the reference resolves (bundled PMD current with the PMD release line), or at minimum the loadable rules still run and the failure clearly names the unresolvable rule and the bundled PMD version.
Actual Behavior
The pmd engine fails entirely; zero rules from the ruleset execute:
Error: Code Analyzer:
Failed to get rules from engine with name 'pmd' due to the following error:
PMD errored when attempting to load a custom ruleset "my-rules.xml".
Make sure the resource is a valid ruleset file on disk or on the Java classpath.
PMD Exception:
| Cannot load ruleset my-rules.xml: PMD threw an unexpected exception:
| Error at my-rules.xml:7:4
| <rule ref="category/apex/errorprone.xml/InvocableClassNoArgConstructor"/>
| ^^^^^ Unable to find referenced rule InvocableClassNoArgConstructor;
| perhaps the rule name is misspelled?
The run then reports 1 Critical severity violation(s) found across 0 files, which downstream tooling can misread as a code finding.
Control (shows the rest of the ruleset is valid): delete the single <rule ref="category/..."/> line from my-rules.xml and re-run step 5 — the scan now succeeds and pmd:MyOtherRule correctly flags Sample.cls:3. One unresolvable reference is the only difference between "everything runs" and "nothing runs".
Requests
- Bump the bundled PMD in
@salesforce/code-analyzer-pmd-engineto the current PMD release line (7.26.0 shipped 2026-06-29; the all-or-nothing ruleset load is PMD's own semantics, so currency of the bundle is what decides whether a ruleset referencing new standard rules is usable at all). - Improve the diagnostic: when a custom ruleset fails to load over an unresolvable rule reference, state the bundled PMD version in the message (for example "bundled PMD is 7.25.0;
InvocableClassNoArgConstructorrequires 7.26.0+") so users don't debug a "misspelled rule name" that is actually a version gap. (Companion request for the underlying message on the PMD side: pmd/pmd#6865.) - (Nice to have) A documented way to supply or override the PMD version the engine uses.
Workaround
Remove standard-category rule references from custom rulesets (inline the XPath equivalents or run the standalone PMD CLI >= 7.26.0 separately).
Environment
code-analyzerplugin 5.14.0 (latest),@salesforce/code-analyzer-pmd-engine0.43.0 (latest)- Bundled jars:
pmd-apex-7.25.0.jar,pmd-core-7.25.0.jar(indist/java-lib/) - Standalone PMD for comparison: 7.26.0 (2026-06-29)
- macOS 15 / Node 22
- 主要语言
- TypeScript
- 星标
- 241
- 派生
- 51
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
forcedotcom/code-analyzer 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
forcedotcom/code-analyzer#2094 ·
-
难度 1/5 1 小时以内 新手友好度 88/100
forcedotcom/code-analyzer#2093 ·
-
难度 2/5 1-3 小时 新手友好度 82/100
forcedotcom/code-analyzer#2091 ·
-
[BUG][code-analyzer] sfge: calling toString() on an enum aborts the entry point (UnimplementedMethodException)可能重新可做 关联的 PR 已关闭且未合并。 未关闭
难度 2/5 1-3 小时 新手友好度 76/100
forcedotcom/code-analyzer#2090 ·
-
难度 3/5 1-2 天 新手友好度 72/100
forcedotcom/code-analyzer#2104 ·
查看 forcedotcom/code-analyzer 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
simkimsia/netlify-axi#19 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
subhranshudash13-dotcom/Contribo#74 ·
维护者通常 1 天内回复
-
enhancement frontend good first issue Stellar Wave trivial
难度 2/5 1-3 小时 新手友好度 76/100
Godgift-care/sci-healthcare-frontend#166 · 1 条评论 ·
维护者通常 1 天内回复
-
backend good first issue security Stellar Wave trivial
难度 2/5 1-3 小时 新手友好度 82/100
Godgift-care/sci-healthcare-backend#171 · 1 条评论 ·
维护者通常 1 天内回复