Maven构建因JDT依赖报错:org.osgi.service.prefs无可用版本
问题根因
从报错链路和pom配置看,问题核心出在三点:
- 你仅在
<dependencies>中手动声明Eclipse系列组件版本,没有做全局版本锁定,Maven依赖调解规则没有按你声明的版本拉取组件:报错链路显示实际解析到的是org.eclipse.core.resources:3.12.0、org.eclipse.equinox.preferences:3.10.0,并非你手动配置的3.14.0和3.9.0,这两个低版本组件依赖的org.osgi.service:org.osgi.service.prefs版本区间为[1.1.0,1.2.0),版本匹配失败。 - 你手动选择的Eclipse Platform组件版本跨度极大,从3.7.x到3.20.x横跨十余个发行版,Eclipse平台组件本身是同批次迭代、强版本绑定的,跨版本混搭必然出现依赖树混乱的问题。
- 你手动添加1.1.0版本的osgi偏好包无效,是因为传递依赖的版本区间规则会做全局校验,没有排除传递依赖中的版本约束的话,Maven还是会优先按传递依赖的版本区间做匹配,不会直接使用你声明的版本。
可行解决方案
按稳定性从高到低选择:
方案1:引入Eclipse BOM统一管理版本(推荐)
不用手动逐个指定Eclipse组件版本,通过官方BOM自动对齐同版本的配套依赖,从根源避免版本混乱:
- 在pom.xml中添加
<dependencyManagement>节点,引入和你使用的org.eclipse.jdt.core:3.20.0配套的平台BOM:
<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.platform</groupId> <artifactId>org.eclipse.platform</artifactId> <version>3.20.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
- 把原来
<dependencies>下所有org.eclipse.platform开头的依赖的<version>标签全部删掉,版本由BOM自动导入,不需要手动维护。 - 执行
mvn clean install -U强制更新依赖后构建即可。
方案2:手动锁死依赖+排除冲突约束
如果不想引入BOM,就手动把冲突的传递依赖全部排除,强制使用指定版本:
- 给所有Eclipse相关依赖添加排除规则,去掉传递依赖中对
org.osgi.service.prefs的版本约束,以jdt核心依赖为例:
<dependency> <groupId>org.eclipse.jdt</groupId> <artifactId>org.eclipse.jdt.core</artifactId> <version>3.20.0</version> <exclusions> <exclusion> <groupId>org.osgi.service</groupId> <artifactId>org.osgi.service.prefs</artifactId> </exclusion> </exclusions> </dependency>
对org.eclipse.core.resources、org.eclipse.equinox.preferences、org.eclipse.core.runtime这几个会传递引入该osgi包的依赖,都加上上面的排除规则。
2. 显式在dependencies中添加1.1.0版本的osgi偏好包:
<dependency> <groupId>org.osgi.service</groupId> <artifactId>org.osgi.service.prefs</artifactId> <version>1.1.0</version> </dependency>
- 把所有Eclipse平台组件的版本统一对齐到同一个发行版,不要跨大版本混搭,全部用3.20.x系列对应的配套版本,避免其他依赖冲突。
补充排查项
如果上面操作后还是提示找不到版本,先做两项检查:
- 执行
mvn dependency:tree -Dincludes=org.osgi.service:org.osgi.service.prefs查看实际解析的依赖路径,确认没有漏排除的传递依赖。 - 检查settings.xml中的镜像配置,如果使用的是公共镜像,可能存在部分冷门版本包同步不全的问题,切换镜像或强制更新依赖后重试。
内容的提问来源于stack exchange,提问作者Rick.X
相关产品推荐
相关产品推荐

