You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse产品导出失败:运行时出现ClassNotFoundException问题求助

Eclipse e4产品导出后ClassNotFoundException排查方案

问题背景

基于Eclipse e4的Java项目,包含40个插件、数千个类,IDE中运行完全正常,但导出独立运行产品后,主插件au.xxxxx.yyyy.one的Activator.start()调用au.xxxxx.yyyy.sysenv.Environment的静态方法时,抛出:

BundleException: ClassNotFoundException: au.xxxxx.yyyy.sysenv.Environment cannot be found by au.xxxxx.yyyy.one_1.0.0.202305301827

已确认的前置检查:

  • sysenv项目已导出Environment类
  • one项目将sysenv列为必需插件
  • sysenv项目的二进制构建包含该类
  • 导出后的sysenv jar包内存在该类

排查与解决思路

1. 校验插件依赖版本匹配

打开one插件的MANIFEST.MF,检查Require-Bundle中au.xxxxx.yyyy.sysenv的版本范围:

  • 确保版本范围覆盖导出的sysenv插件版本(比如导出版本是1.0.0,不要写[1.0.0,1.0.0)这种排他范围)
  • 避免不必要的版本限制,若无需严格版本,可简化为au.xxxxx.yyyy.sysenv;bundle-version="1.0.0"或直接省略版本(不推荐,易引发版本冲突)

2. 确认产品配置的插件包含

打开产品定义文件(.product):

  • 切换到Plug-ins标签页,手动勾选au.xxxxx.yyyy.sysenv插件(不要依赖自动依赖解析,静态调用可能无法被自动识别)
  • 若使用Feature打包,检查对应的Feature是否包含sysenv插件,且Feature被添加到产品配置中

3. 检查sysenv插件的导出配置

打开sysenv插件的MANIFEST.MF:

  • 确认Export-Package中存在au.xxxxx.yyyy.sysenv,且无x-internal或x-friends限制(若仅允许one插件访问,需明确添加x-friends:="au.xxxxx.yyyy.one")
  • 检查Bundle-ClassPath配置,默认值为.,若有自定义路径,需确保包含Environment类所在的编译输出目录

4. 清理缓存后重新构建

  • 关闭Eclipse,删除工作区下的.metadata/.plugins/org.eclipse.pde.core目录(清除PDE的构建缓存)
  • 重启Eclipse,执行Project > Clean...清理所有项目并重新编译
  • 打开产品定义文件,点击Validate按钮验证配置,再重新导出产品

5. 修正导出后的启动配置

打开导出产品目录下的configuration/config.ini:

  • 检查osgi.bundles列表,确认au.xxxxx.yyyy.sysenv存在,且添加@start标记强制启动(比如au.xxxxx.yyyy.sysenv@start)
  • 确保sysenv插件的条目在one插件之前,保证依赖加载顺序正确

6. 借助OSGi控制台诊断

修改产品启动脚本,添加-console参数,启动后在控制台执行以下命令:

  • ss:查看所有插件状态,确认sysenv插件处于ACTIVE状态
  • bundle au.xxxxx.yyyy.one:查看one插件的依赖解析情况,确认sysenv已被正确依赖
  • findclass au.xxxxx.yyyy.sysenv.Environment:查看该类的提供方,以及哪些插件能访问到它

内容的提问来源于stack exchange,提问作者Jonathan Masters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:53:18