Eclipse 2024-03中AspectJ插件产品启动类找不到异常求助
Eclipse 2024-03/2023-12 中AspectJ切面修改JDT编译器引发
NoClassDefFoundError(Windows环境无解) 问题概述
我维护一组Eclipse插件,其中一个通过AspectJ切面修改Eclipse JDT编译器行为。这些插件结合官方Eclipse组件组成产品,用Maven+Tycho构建,在Eclipse 2023-06及更早版本稳定运行多年。但升级到Eclipse 2024-03后出现以下问题:
- 产品启动时,Error Log中出现
org.eclipse.osgi抛出的FrameworkEvent ERROR异常,核心错误为java.lang.NoClassDefFoundError: org/eclipse/jdt/internal/compiler/lookup/TypeBinding$AjcClosure1 - 导入Maven项目后,会出现带有类似堆栈的随机错误
- Linux和Windows平台均出现该问题,但修复方案仅在Linux生效
已尝试的解决方案
- 在Linux环境中,通过在产品配置文件中添加以下配置解决问题:
但同样的配置在Windows环境完全无效<plugin id="org.eclipse.equinox.weaving.aspectj" autoStart="true" startLevel="1" /> - 尝试调整该配置的变体(如修改startLevel、移除autoStart等),均未解决Windows下的问题
- 切换AJDT版本:使用兼容Eclipse 2024-03的最新AJDT版本、2023-12版本均存在问题;回退到2023-09版本时,问题消失
环境信息
- 构建工具:Maven + Tycho
- 受影响Eclipse版本:2023-12、2024-03
- 正常运行版本:2023-06及更早、2023-09
- 涉及平台:Linux、Windows
复现材料
已提供可完整复现问题的示例资源:
- 产品配置文件(*.product)
- 包含AspectJ切面的插件MANIFEST.MF
- 空实现的切面代码
排查方向建议
- 验证Windows下Weaving Bundle的启动状态:通过Eclipse OSGI控制台(启动时添加
-console参数),检查org.eclipse.equinox.weaving.aspectj的启动状态,确认startLevel=1和autoStart=true是否被正确应用 - 核对AJDT与Eclipse版本兼容性细节:查看AJDT官方发布说明,确认2023-12/2024-03版本是否存在Windows平台的已知织入问题
- 检查类加载顺序差异:Windows和Linux下OSGI类加载顺序可能存在差异,需确保Weaving Bundle在JDT核心类加载前完成初始化
- 临时添加JDT内部依赖:在切面插件的MANIFEST.MF中尝试添加对
org.eclipse.jdt.core的依赖(设置resolution:=optional),验证是否能解决类找不到的问题(注意:依赖JDT内部包属于非官方用法,仅用于排查) - 对比跨平台构建依赖树:通过Tycho的
dependency:tree目标,检查Windows和Linux构建的依赖树是否一致,确认是否有缺失的织入相关bundle
内容的提问来源于stack exchange,提问作者Karol Mierzejewski
相关产品推荐
相关产品推荐

