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

Eclipse RCP从4.6.3迁移至4.15后Gradle构建出现Bundle依赖异常

Eclipse RCP 4.6.3迁移至4.15后Gradle构建依赖解析异常问题

我们正在将Eclipse RCP项目从Eclipse 4.6.3迁移到4.15版本,已获取Eclipse 4.15 plugins目录下的所有JAR包。在Eclipse 4.15 IDE中启动产品可正常运行,但使用Gradle构建生成可执行文件时,出现Bundle依赖解析异常,其中一条关键错误日志如下:

!ENTRY org.eclipse.ui.intro.quicklinks 4 0 2022-09-26 06:17:24.126
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.osgi.framework.BundleException: Could not resolve module: org.eclipse.ui.intro.quicklinks [289]
  Unresolved requirement: Require-Bundle: org.eclipse.ui.intro; bundle-version="3.4.0"
    -> Bundle-SymbolicName: org.eclipse.ui.intro; bundle-version="3.5.900.v20200217-1223"; singleton="true"
       org.eclipse.ui.intro [286]
         Unresolved requirement: Require-Bundle: org.eclipse.ui; bundle-version="[3.6.0,4.0.0)"
           -> Bundle-SymbolicName: org.eclipse.ui; bundle-version="3.116.0.v20200203-1308"; singleton="true"
              org.eclipse.ui [276]
                Unresolved requirement: Require-Bundle: org.eclipse.ui.workbench; bundle-version="[3.117.0,4.0.0)"; visibility="reexport"
                  -> Bundle-SymbolicName: org.eclipse.ui.workbench; bundle-version="3.118.1.v20220104-1840"; singleton="true"
                     org.eclipse.ui.workbench [309]
                       Unresolved requirement: Import-Package: org.eclipse.e4.core.commands
                         -> Export-Package: org.eclipse.e4.core.commands; bundle-symbolic-name="org.eclipse.e4.core.commands"; bundle-version="0.12.900.v20200110-1732"; version="0.0.0"; x-friends="org.eclipse.e4.ui.bindings,  org.eclipse.e4.ui.workbench,  org.eclipse.e4.ui.workbench.renderers.swt,  org.eclipse.ui.workbench,  org.eclipse.e4.ui.workbench.swt,  org.eclipse.e4.ui.progress,  org.eclipse.e4.core.commands.tests"
                            org.eclipse.e4.core.commands [92]
                              Unresolved requirement: Import-Package: org.eclipse.e4.core.contexts
                                -> Export-Package: org.eclipse.e4.core.contexts; bundle-symbolic-name="org.eclipse.e4.core.contexts"; bundle-version="1.8.400.v20191217-1710"; version="1.7.0"
                                   org.eclipse.e4.core.contexts [95]
                                     Unresolved requirement: Import-Package: org.osgi.service.event; version="1.3.0"
                                       -> Export-Package: org.osgi.service.event; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.4.0"; uses="org.osgi.framework"
                                          org.eclipse.osgi.services [262]
                                            Unresolved requirement: Import-Package: org.osgi.util.function; version="[1.0.0,2.0.0)"
                              Unresolved requirement: Import-Package: org.eclipse.e4.core.services.log
                                -> Export-Package: org.eclipse.e4.core.services.log; bundle-symbolic-name="org.eclipse.e4.core.services"; bundle-version="2.2.200.v20200127-0814"; version="0.0.0"; x-friends="org.eclipse.e4.ui.bindings,  org.eclipse.e4.ui.services,  org.eclipse.e4.ui.workbench,  org.eclipse.e4.ui.workbench.renderers.swt,  org.eclipse.e4.ui.workbench.swt,  org.eclipse.ui.workbench"
                                   org.eclipse.e4.core.services [107]
                                     Unresolved requirement: Import-Package: org.osgi.service.event; resolution="optional"
                                       -> Export-Package: org.osgi.service.event; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.4.0"; uses="org.osgi.framework"
                                     Unresolved requirement: Require-Bundle: org.eclipse.e4.core.contexts
                                       -> Bundle-SymbolicName: org.eclipse.e4.core.contexts; bundle-version="1.8.400.v20191217-1710"
                                     Unresolved requirement: Import-Package: org.osgi.service.component.annotations; version="1.2.0"; resolution="optional"
                                       -> Export-Package: org.osgi.service.component.annotations; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.3.0"
                                     Unresolved requirement: Import-Package: org.osgi.service.log; version="1.3.0"
                                       -> Export-Package: org.osgi.service.log; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.4.0"; uses="org.osgi.framework"
                       Unresolved requirement: Import-Package: org.eclipse.e4.ui.internal.workbench.addons
                         -> Export-Package: org.eclipse.e4.ui.internal.workbench.addons; bundle-symbolic-name="org.eclipse.e4.ui.workbench"; bundle-version="1.11.200.v20200205-1503"; version="0.0.0"; x-internal="true"
                            org.eclipse.e4.ui.workbench [137]
                              Unresolved requirement: Import-Package: org.osgi.service.event; version="1.3.0"
                                -> Export-Package: org.osgi.service.event; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.4.0"; uses="org.osgi.framework"
                              Unresolved requirement: Import-Package: org.osgi.service.component.annotations; version="1.2.0"; resolution="optional"
                                -> Export-Package: org.osgi.service.component.annotations; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.3.0"
                       Unresolved requirement: Import-Package: org.eclipse.e4.core.commands.internal
                         -> Export-Package: org.eclipse.e4.core.commands.internal; bundle-symbolic-name="org.eclipse.e4.core.commands"; bundle-version="0.12.900.v20200110-1732"; version="0.0.0"; x-friends="org.eclipse.e4.ui.bindings,org.eclipse.ui.workbench"
                       Unresolved requirement: Import-Package: org.eclipse.e4.ui.internal.workbench
                         -> Export-Package: org.eclipse.e4.ui.internal.workbench; bundle-symbolic-name="org.eclipse.e4.ui.workbench"; bundle-version="1.11.200.v20200205-1503"; version="0.0.0"; x-friends="org.eclipse.e4.ui.workbench.fragment,  org.eclipse.e4.ui.workbench.renderers.swt,  org.eclipse.e4.ui.workbench.swt,  org.eclipse.ui.workbench,  org.eclipse.ui.ide.application,  org.eclipse.ui.ide,  org.eclipse.e4.emf.xpath.test"
         Unresolved requirement: Require-Bundle: org.eclipse.help.base; bundle-version="[4.0.0,5.0.0)"; resolution="optional"
           -> Bundle-SymbolicName: org.eclipse.help.base; bundle-version="4.2.902.v20210603-0901"; singleton="true"
              org.eclipse.help.base [220]
                Unresolved requirement: Require-Bundle: org.apache.lucene.analyzers-smartcn; bundle-version="[8.4.1,9.0.0)"
                Unresolved requirement: Import-Package: org.eclipse.equinox.http.jetty; resolution="optional"
                  -> Export-Package: org.eclipse.equinox.http.jetty; bundle-symbolic-name="org.eclipse.equinox.http.jetty"; bundle-version="3.7.400.v20210325-0520"; version="1.5.0"
                     org.eclipse.equinox.http.jetty [177]
                       Unresolved requirement: Import-Package: org.eclipse.jetty.servlet; version="[9.4.0,10.0.0)"
                         -> Export-Package: org.eclipse.jetty.servlet; bundle-symbolic-name="org.eclipse.jetty.servlet"; bundle-version="9.4.48.v20220622"; version="9.4.48"; uses="javax.servlet,javax.servlet.descriptor,javax.servlet.http,org.eclipse.jetty.http.pathmap,org.eclipse.jetty.security,org.eclipse.jetty.server,org.eclipse.jetty.server.handler,org.eclipse.jetty.server.handler.gzip,org.eclipse.jetty.server.session,org.eclipse.jetty.util,org.eclipse.jetty.util.annotation,org.eclipse.jetty.util.component,org.eclipse.jetty.util.resource"
                            org.eclipse.jetty.servlet [246]
                              Unresolved requirement: Import-Package: org.eclipse.jetty.jmx; version="[9.4.48,10.0.0)"; resolution="optional"
                              Unresolved requirement: Import-Package: org.eclipse.jetty.util.ajax; version="[9.4.48,10.0.0)"
                       Unresolved requirement: Import-Package: org.eclipse.equinox.http.servlet; version="[1.2.0,2.0.0)"
                         -> Export-Package: org.eclipse.equinox.http.servlet; bundle-symbolic-name="org.eclipse.equinox.http.servlet"; bundle-version="1.6.401.v20210322-1703"; version="1.2.0"
                            org.eclipse.equinox.http.servlet [183]
                              Unresolved requirement: Import-Package: org.apache.commons.fileupload; version="[1.2.2,2.0.0)"; resolution="optional"
                              Unresolved requirement: Import-Package: org.apache.commons.fileupload.disk; version="[1.2.2,2.0.0)"; resolution="optional"
                              Unresolved requirement: Import-Package: org.apache.commons.fileupload.servlet; version="[1.2.2,2.0.0)"; resolution="optional"
                              Unresolved requirement: Import-Package: org.osgi.service.http; version="[1.2.0,1.3.0)"
                                -> Export-Package: org.osgi.service.http; bundle-symbolic-name="org.eclipse.osgi.services"; bundle-version="3.8.0.v20190206-2147"; version="1.2.1"; uses="javax.servlet,javax.servlet.http"

问题分析

从错误栈可以看出,核心问题在于Gradle构建时没有完整引入所有必需的OSGi依赖:

  • OSGi基础服务缺失:org.eclipse.osgi.services依赖的org.osgi.util.function包未被包含,Eclipse IDE会自动补充这类基础依赖,但Gradle构建需要显式声明。
  • E4核心依赖不完整:org.eclipse.e4.core.contexts、org.eclipse.e4.core.commands等E4核心包的传递依赖未被全部引入。
  • 可选依赖处理不当:部分标记为可选的依赖(如帮助功能相关的Jetty、Lucene包),如果产品实际用到则必须包含,否则需要排除相关模块。

解决方案

1. 优化Gradle构建脚本

放弃手动添加plugins目录JAR包的方式,使用Gradle的eclipseRcp或osgiRuntime插件自动解析Bundle依赖,确保所有传递依赖都被正确引入。示例配置:

plugins {
    id 'java'
    id 'eclipse-rcp'
}

repositories {
    mavenCentral()
    eclipseMavenCentral() // 引入Eclipse官方Maven仓库
}

rcp {
    product {
        id = 'com.yourcompany.product'
        version = '1.0.0'
        application = 'com.yourcompany.application'
        features {
            include 'com.yourcompany.feature'
            include 'org.eclipse.platform' // 引入Eclipse平台核心特性
        }
    }
}

2. 补充OSGi基础依赖

如果仍需手动管理依赖,显式添加org.osgi.util.function所在的Bundle:

dependencies {
    runtimeOnly 'org.eclipse.osgi:org.eclipse.osgi:3.15.300'
    runtimeOnly 'org.osgi:org.osgi.util.function:1.1.0'
}

3. 处理可选依赖

  • 如果不需要帮助功能:在产品配置中排除org.eclipse.ui.intro.quicklinks和org.eclipse.help.base模块。
  • 如果需要帮助功能:补充所有相关的Jetty、Lucene依赖包到构建配置中。

4. 验证依赖完整性

执行gradle dependencies命令查看依赖树,确认所有缺失的包都已被包含,没有未解析的依赖项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:40:21