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

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环境中,通过在产品配置文件中添加以下配置解决问题:
    <plugin id="org.eclipse.equinox.weaving.aspectj" autoStart="true" startLevel="1" />
    
    但同样的配置在Windows环境完全无效
  • 尝试调整该配置的变体(如修改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
  • 空实现的切面代码

排查方向建议

  1. 验证Windows下Weaving Bundle的启动状态:通过Eclipse OSGI控制台(启动时添加-console参数),检查org.eclipse.equinox.weaving.aspectj的启动状态,确认startLevel=1和autoStart=true是否被正确应用
  2. 核对AJDT与Eclipse版本兼容性细节:查看AJDT官方发布说明,确认2023-12/2024-03版本是否存在Windows平台的已知织入问题
  3. 检查类加载顺序差异:Windows和Linux下OSGI类加载顺序可能存在差异,需确保Weaving Bundle在JDT核心类加载前完成初始化
  4. 临时添加JDT内部依赖:在切面插件的MANIFEST.MF中尝试添加对org.eclipse.jdt.core的依赖(设置resolution:=optional),验证是否能解决类找不到的问题(注意:依赖JDT内部包属于非官方用法,仅用于排查)
  5. 对比跨平台构建依赖树:通过Tycho的dependency:tree目标,检查Windows和Linux构建的依赖树是否一致,确认是否有缺失的织入相关bundle

内容的提问来源于stack exchange,提问作者Karol Mierzejewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:13