Eclipse 2024-12更新后Windows无法启动:模块依赖问题求助
Eclipse更新后启动失败的问题排查与修复
问题背景
更新Eclipse后程序无法启动,通过-Console和-ConsoleLog参数启动获取日志,核心问题为关键模块加载失败,日志详情如下:
WARNING: Using incubator modules: jdk.incubator.vector Dec 17, 2024 2:33:31 PM org.apache.aries.spifly.BaseActivator log INFO: Registered provider org.slf4j.simple.SimpleServiceProvider of service org.slf4j.spi.SLF4JServiceProvider in bundle slf4j.simple !SESSION 2024-12-17 14:33:23.006 ----------------------------------------------- eclipse.buildId=4.34.0.20241128-0756 java.version=21.0.3 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_AU Framework arguments: -product org.eclipse.epp.package.cpp.product Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.cpp.product -console -consoleLog !ENTRY org.eclipse.cbi.targetplatform 4 0 2024-12-17 14:33:32.443 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException: Could not resolve module: org.eclipse.cbi.targetplatform [304] Unresolved requirement: Require-Bundle: org.eclipse.xtext -> Bundle-SymbolicName: org.eclipse.xtext; bundle-version="2.25.0.v20210301-0843"; singleton="true" org.eclipse.xtext [1858] Unresolved requirement: Require-Bundle: org.eclipse.xtext.util; visibility="reexport" -> Bundle-SymbolicName: org.eclipse.xtext.util; bundle-version="2.25.0.v20210301-0843" org.eclipse.xtext.util [1881] Unresolved requirement: Require-Bundle: com.google.guava; bundle-version="[30.1.0,31.0.0)"; visibility="reexport" -> Bundle-SymbolicName: com.google.guava; bundle-version="30.1.0.v20221112-0806" com.google.guava [49] Unresolved requirement: Import-Package: com.google.errorprone.annotations; version="[3.0.0,4.0.0)"; resolution="optional" Unresolved requirement: Import-Package: com.google.errorprone.annotations.concurrent; version="[3.0.0,4.0.0)"; resolution="optional" Unresolved requirement: Import-Package: javax.crypto; version="[3.0.0,4.0.0)"; resolution="optional" Unresolved requirement: Import-Package: javax.crypto.spec; version="[3.0.0,4.0.0)"; resolution="optional" Unresolved requirement: Import-Package: org.checkerframework.checker.nullness.qual; version="[3.5.0,4.0.0)"; resolution="optional" Unresolved requirement: Import-Package: org.apache.log4j; version="1.2.15" -> Export-Package: org.apache.log4j; bundle-symbolic-name="org.apache.log4j"; bundle-version="1.2.15.v201012070815"; version="1.2.15" org.apache.log4j [248] No resolution report for the bundle. Unresolved requirement: Require-Bundle: org.eclipse.xtend.lib -> Bundle-SymbolicName: org.eclipse.xtend.lib; bundle-version="2.36.0.v20240825-0714" org.eclipse.xtend.lib [1848] Unresolved requirement: Require-Bundle: org.eclipse.xtend.lib.macro; bundle-version="2.36.0"; visibility="reexport" -> Bundle-SymbolicName: org.eclipse.xtend.lib.macro; bundle-version="2.36.0.v20240825-0714" org.eclipse.xtend.lib.macro [1849] No resolution report for the bundle. Unresolved requirement: Import-Package: org.apache.log4j; version="1.2.15" -> Export-Package: org.apache.log4j; bundle-symbolic-name="org.apache.log4j"; bundle-version="1.2.15.v201012070815"; version="1.2.15" Unresolved requirement: Require-Bundle: org.objectweb.asm; bundle-version="[9.1.0,9.2.0)"; resolution="optional" -> Bundle-SymbolicName: org.objectweb.asm; bundle-version="9.1.0.v20210209-1849" org.objectweb.asm [2054] No resolution report for the bundle. Unresolved requirement: Require-Bundle: org.eclipse.xtend.lib; resolution="optional" -> Bundle-SymbolicName: org.eclipse.xtend.lib; bundle-version="2.36.0.v20240825-0714" Unresolved requirement: Import-Package: org.apache.log4j -> Export-Package: org.apache.log4j; bundle-symbolic-name="org.apache.log4j"; bundle-version="1.2.15.v201012070815"; version="1.2.15" Unresolved requirement: Require-Bundle: org.eclipse.xtext.util -> Bundle-SymbolicName: org.eclipse.xtext.util; bundle-version="2.25.0.v20210301-0843" Unresolved requirement: Require-Bundle: org.eclipse.xtend.lib -> Bundle-SymbolicName: org.eclipse.xtend.lib; bundle-version="2.36.0.v20240825-0714" Bundle was not resolved because of a uses constraint violation. org.apache.felix.resolver.reason.ReasonException: Uses constraint violation. Unable to resolve resource org.eclipse.cbi.targetplatform [osgi.identity; type="osgi.bundle"; version:Version="3.1.0.202409011232"; osgi.identity="org.eclipse.cbi.targetplatform"; singleton="true"] because it is exposed to package 'com.google.common.util.concurrent.internal' from resources com.google.guava [osgi.identity; type="osgi.bundle"; version:Version="30.1.0.v20221112-0806"; osgi.identity="com.google.guava"] and com.google.guava.failureaccess [osgi.identity; type="osgi.bundle"; version:Version="1.0.2"; osgi.identity="com.google.guava.failureaccess"] via two dependency chains. Chain 1: org.eclipse.cbi.targetplatform [osgi.identity; type="osgi.bundle"; version:Version="3.1.0.202409011232"; osgi.identity="org.eclipse.cbi.targetplatform"; singleton="true"] require: (osgi.wiring.bundle=org.eclipse.xtext) | provide: osgi.wiring.bundle: org.eclipse.xtext com.google.guava [osgi.identity; type="osgi.bundle"; version:Version="30.1.0.v20221112-0806"; osgi.identity="com.google.guava"] Chain 2: org.eclipse.cbi.targetplatform [osgi.identity; type="osgi.bundle"; version:Version="3.1.0.202409011232"; osgi.identity="org.eclipse.cbi.targetplatform"; singleton="true"] require: (&(osgi.wiring.bundle=org.eclipse.xtext.xbase.lib)(bundle-version>=2.14.0)) | provide: osgi.wiring.bundle; bundle-version:Version="2.37.0.v20241119-0857"; osgi.wiring.bundle="org.eclipse.xtext.xbase.lib" com.google.guava [osgi.identity; type="osgi.bundle"; version:Version="33.3.1.jre"; osgi.identity="com.google.guava"] import: (&(osgi.wiring.package=com.google.common.util.concurrent.internal)(&(version>=1.0.0)(!(version>=2.0.0)))) | export: osgi.wiring.package: com.google.common.util.concurrent.internal com.google.guava.failureaccess [osgi.identity; type="osgi.bundle"; version:Version="1.0.2"; osgi.identity="com.google.guava.failureaccess"] at org.eclipse.osgi.container.Module.start(Module.java:493) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:2102) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:143) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:2093) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:2033) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1996) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1912) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341)
问题根源
日志中明确指出Uses constraint violation(使用约束冲突):
- Eclipse插件目录中同时存在两个版本的
com.google.guavaBundle:30.1.0.v20221112-0806和33.3.1.jre org.eclipse.cbi.targetplatform模块通过两条依赖链,分别从这两个版本的Guava中获取com.google.common.util.concurrent.internal包- OSGi的 resolver 无法解决这种包版本冲突,导致核心模块无法解析,最终启动失败
日志中其他的可选依赖警告(比如com.google.errorprone.annotations、javax.crypto等)不影响启动,是次要问题。
修复方法
方法1:清理重复的Guava Bundle(优先推荐)
- 打开Eclipse安装目录下的
plugins文件夹 - 搜索所有文件名包含
com.google.guava的jar文件 - 找到两个版本:
com.google.guava_30.1.0.v20221112-0806.jar和com.google.guava_33.3.1.jre.jar - 保留版本更高的
33.3.1.jre版本,将旧版本的jar文件移动到备份文件夹(不要直接删除,方便回滚) - 启动Eclipse,验证是否正常加载
- 如果启动仍有问题,添加
-clean参数清理缓存:eclipse.exe -clean
方法2:禁用冲突模块(如果方法1无效)
如果org.eclipse.cbi.targetplatform不是你的工作必需模块,可以直接禁用它:
- 打开Eclipse安装目录下的
configuration/config.ini文件 - 在文件末尾添加一行:
org.eclipse.cbi.targetplatform@start=false - 保存文件后重启Eclipse
内容的提问来源于stack exchange,提问作者mikb
相关产品推荐
相关产品推荐

