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

Jetty 9.4.x升级至10版本时OSGi依赖验证报错如何解决

Jetty 10 OSGi迁移服务加载能力缺失错误解决方案

你遇到的错误是Jetty 10的org.eclipse.jetty.webapp bundle在MANIFEST.MF中声明了如下依赖要求:

Require-Capability: osgi.serviceloader; filter:"(osgi.serviceloader=org.eclipse.jetty.webapp.Configuration)"

该要求表示需要OSGi运行环境提供ServiceLoader能力,来加载org.eclipse.jetty.webapp.Configuration接口的实现类,你的现有启动配置没有满足该要求,所以触发验证错误。

修复方案

  • 方案1:调整SPI Fly启动配置(优先推荐,符合OSGi规范)

    你已经引入了Aries SPI Fly动态bundle来处理ServiceLoader的OSGi适配,只需要调整配置即可:

    1. 将org.apache.aries.spifly.dynamic.bundle的启动级别调整为1,确保它在所有Jetty bundle之前启动,这样才能正常为Jetty的SPI接口做字节码增强
    2. 确认org.eclipse.osgi.services的版本不低于3.7,满足OSGi ServiceLoader规范1.0的要求
    3. 替换你当前使用的SLF4J 2.0.0.alpha1预览版为正式发布的SLF4J 2.0.x版本,避免日志依赖兼容问题
  • 方案2:手动注册Configuration服务(适合嵌入式Jetty场景)

    如果你是自行编码启动嵌入式Jetty,可以手动将需要的Configuration实现注册到OSGi服务注册表,跳过SPI自动扫描的要求,示例代码如下:

    import org.eclipse.jetty.webapp.*;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.FrameworkUtil;
    
    // 获取当前bundle的上下文
    BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
    // 按需添加你需要用到的Jetty WebApp配置实现
    Configuration[] configs = new Configuration[]{
        new WebXmlConfiguration(),
        new AnnotationConfiguration(),
        new JettyWebXmlConfiguration(),
        new FragmentConfiguration()
    };
    // 注册服务
    for (Configuration config : configs) {
        context.registerService(Configuration.class.getName(), config, null);
    }
    
  • 方案3:手动指定WebApp配置(最简方案,不需要依赖SPI能力)

    如果你完全不需要Jetty的自动配置发现机制,在初始化WebAppContext的时候直接传入配置列表,即可绕过ServiceLoader依赖检查:

    WebAppContext webApp = new WebAppContext();
    // 手动指定所有需要的配置,不需要从SPI加载
    webApp.setConfigurations(new Configuration[]{
        new WebXmlConfiguration(),
        new JettyWebXmlConfiguration()
    });
    

内容的提问来源于stack exchange,提问作者flavio.donze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:15:03