
在 Eclipse PDE 中定义产品(.product)时,若在 Launching 标签页直接输入多条 --add-opens 参数,PDE 可能错误合并参数导致启动失败;正确写法是为每项显式使用 --add-opens= 等号形式,确保参数被准确解析。
在 eclipse pde 中定义产品(.product)时,若在 launching 标签页直接输入多条 `--add-opens` 参数,pde 可能错误合并参数导致启动失败;正确写法是为每项显式使用 `--add-opens=` 等号形式,确保参数被准确解析。
在基于 Eclipse RCP 的产品开发中,尤其在迁移到 Java 17+ 后,--add-opens 是绕过模块封装限制、保障 SWT/AWT/核心类库正常反射访问的必需 JVM 参数。然而,Eclipse PDE 的产品定义编辑器(.product 文件 UI)对多行 VM 参数的解析存在已知缺陷:当在 Launching 选项卡中按行输入如下内容:
--add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.desktop/java.awt.font=ALL-UNNAMED
PDE 会错误地将后续参数识别为前一个 --add-opens 的附加值,而非独立参数,最终生成的启动配置等效于:
--add-opens java.base/java.util=ALL-UNNAMED java.base/java.text=ALL-UNNAMED java.desktop/java.awt.font=ALL-UNNAMED
这违反了 JVM 规范——--add-opens 是一个接受单个 <module>/<package>=<target></target></package></module> 形参的选项,多个值必须通过重复该选项实现,而非空格拼接。因此 JVM 将 java.base/java.text=ALL-UNNAMED 误判为主类名,抛出典型的 ClassNotFoundException 错误:
Fehler: Hauptklasse java.base.java.text=ALL-UNNAMED konnte nicht gefunden oder geladen werden
✅ 正确解决方案:强制使用等号语法(--add-opens=)
Eclipse IDE 是一款由 Eclipse 基金会管理的开源、跨平台集成开发环境。其核心基于 Java 构建,通过强大的插件架构可扩展支持 C/C++、Python、PHP 等多种编程语言。它提供丰富的代码编辑、调试和重构工具,并紧密集成 Git、Maven 等现代开发工具链,是全球众多开发者首选的 Java 开发利器。
在 .product 文件的 Launching → VM arguments 文本框中,必须为每一项显式添加等号,格式为:
--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED
? 提示:即使参数值本身含等号(如
ALL-UNNAMED),JVM 仍要求--add-opens与模块路径之间用=连接。这是 JDK 9+ 的标准语法,也是 PDE 解析器唯一能可靠识别的格式。
? 验证与调试建议:
- 修改后务必点击 Overview 标签页的 Launch an Eclipse Application 按钮重新生成运行配置;
- 可右键项目 → Debug As → Debug Configurations… → 查看对应 Eclipse Application 配置的 Arguments → VM arguments,确认每行均以
--add-opens=开头; - 若仍失败,请检查是否启用了 Use the product file to launch(默认启用),并确保
.product文件未被其他插件缓存(必要时清理workspace/.metadata/.plugins/org.eclipse.pde.core/下缓存)。
? 总结:
这不是用户配置错误,而是 Eclipse PDE(截至 4.28)在解析多行 --add-opens 时的已知局限(GitHub Issue #735)。规避方法简单而明确:始终采用 --add-opens=<module>/<package>=<target></target></package></module> 的完整等号形式书写。该写法兼容所有 JDK 9+ 版本,且被 PDE 解析器稳定支持,是 RCP 产品在高版本 Java 上安全启动的必备实践。

















