Eclipse 2022-06构建RCP产品后Windows运行报错:com.sun.jna依赖未解析
问题描述
我刚安装了Eclipse 2022-06(4.24.0),并构建导出了默认RCP应用产品。在Windows系统中运行该产品时,日志文件出现如下错误(在Eclipse IDE环境中可正常运行)。看起来com.sun.jna库缺失,但它已被包含在所需插件中,且在构建产品的config.ini和plugins文件夹中也存在。已花费两天时间尝试解决该问题,但仍无头绪。
错误日志
!SESSION 2022-08-16 14:25:08.798 ----------------------------------------------- eclipse.buildId=unknown java.version=18.0.2 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US Framework arguments: -clearPersistedState Command-line arguments: -os win32 -ws win32 -arch x86_64 -clearPersistedState !ENTRY org.eclipse.e4.ui.workbench.addons.swt 4 0 2022-08-16 14:25:09.361 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException: Could not resolve module: org.eclipse.e4.ui.workbench.addons.swt [42] Unresolved requirement: Import-Package: org.eclipse.e4.ui.internal.workbench.swt -> Export-Package: org.eclipse.e4.ui.internal.workbench.swt; bundle-symbolic-name="org.eclipse.e4.ui.workbench.swt"; bundle-version="0.16.500.v20220506-1520"; version="0.0.0"; x-friends:="org.eclipse.e4.ui.workbench.addons.swt,org.eclipse.e4.ui.workbench.renderers.swt,org.eclipse.ui.workbench" org.eclipse.e4.ui.workbench.swt [44] Unresolved requirement: Require-Bundle: org.eclipse.urischeme; bundle-version="1.1.0" -> Bundle-SymbolicName: org.eclipse.urischeme; bundle-version="1.2.100.v20211001-1648"; singleton:="true" org.eclipse.urischeme [64] Unresolved requirement: Require-Bundle: com.sun.jna; bundle-version="[5.8.0,6.0.0)" Unresolved requirement: Require-Bundle: org.eclipse.e4.ui.workbench.renderers.swt; bundle-version="0.9.1" -> Bundle-SymbolicName: org.eclipse.e4.ui.workbench.renderers.swt; bundle-version="0.15.500.v20220511-1638"; singleton:="true" org.eclipse.e4.ui.workbench.renderers.swt [43] Unresolved requirement: Require-Bundle: org.eclipse.e4.ui.workbench.swt; bundle-version="0.9.0" -> Bundle-SymbolicName: org.eclipse.e4.ui.workbench.swt; bundle-version="0.16.500.v20220506-1520"; singleton:="true" at org.eclipse.osgi.container.Module.start(Module.java:463) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
解决方案
校验com.sun.jna版本匹配度
日志明确显示org.eclipse.urischeme要求com.sun.jna的版本范围是[5.8.0,6.0.0),确认你打包的com.sun.jna插件版本处于该区间内。若版本不符,在产品配置的依赖项中指定符合要求的版本。调整com.sun.jna启动级别
打开导出产品的config.ini文件,添加或修改org.osgi.framework.startlevel.bundle配置,将com.sun.jna的启动级别设置为较早的数值(例如com.sun.jna=4),确保依赖它的bundle启动时能找到该库。补全产品依赖链
在Eclipse的.product配置文件中切换到Dependencies标签,点击Add Required Plug-ins按钮,让Eclipse自动补全所有间接依赖,包括com.sun.jna的完整依赖关系,之后重新构建导出产品。清理后重新构建
- 执行IDE项目清理:点击
Project > Clean...,选择所有相关项目进行清理 - 删除旧的导出产品目录,避免残留文件干扰
- 导出时确保勾选Include all required plug-ins选项
- 执行IDE项目清理:点击
检查JNA原生库完整性
com.sun.jna依赖对应系统架构的原生库(如jna.dll),确认这些文件存在于导出产品plugins目录下的com.sun.jna插件文件夹中,且与Windows x86_64架构匹配。若缺失,从Eclipse安装目录的plugins中复制对应原生库文件到导出产品的对应位置。
内容的提问来源于stack exchange,提问作者Knilil

