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
相关产品推荐
相关产品推荐

