org.eclipse.jdt版本更新导致包引入问题

目录

现象

问题分析

依赖分析

包分析

问题总结

解决方式

1、引入国外制作的BOM定义,锁死依赖

2、仓库新增

3、排除错误依赖


现象

在pom引入org.eclipse.jdt.core的情况下

<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>org.eclipse.jdt.core</artifactId>
</dependency>

项目启动报错,找不到org.eclipse.core.runtime.Plugin

打包也报错

Failed to execute goal on project xxx: Could not resolve dependencies for project xxx: 
Failed to collect dependencies at 
org.eclipse.jdt:org.eclipse.jdt.core:jar:3.19.0 -> 
org.eclipse.platform:org.eclipse.core.resources:jar:3.12.0 -> 
org.eclipse.platform:org.eclipse.core.expressions:jar:3.5.100 -> 
org.eclipse.platform:org.eclipse.core.runtime:jar:3.12.0 -> 
org.eclipse.platform:org.eclipse.equinox.preferences:jar:3.10.0 -> 
org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0): 
No versions available for org.osgi.service:org.osgi.service.prefs:jar:[1.1.0,1.2.0) within specified range -> [Help 1]

问题分析

从打包报错中可以看到其实是找不到org.osgi.service:org.osgi.service.prefs这个包,那就从依赖先找一找

依赖分析

org.eclipse.jdt.core包内部采用的是范围依赖

<dependency>
  <groupId>org.eclipse.platform</groupId>
  <artifactId>org.eclipse.core.resources</artifactId>
  <version>[3.12.0,4.0.0)</version>
</dependency>
<dependency>
  <groupId>org.eclipse.platform</groupId>
  <artifactId>org.eclipse.core.runtime</artifactId>
  <version>[3.13.0,4.0.0)</version>
</dependency>

这样写好处是可以每次拉到最新的包,比方说现在最新的是

 但是也有坑:

这种写法会拉取范围内所有包,当其中某一个包出问题后,就会直接终止拉取,换言之,除非你从maven中心删除这个包,否则就会一直出错,这也是这次出问题之后没法及时补救的原因。

包分析

既然知道了为什么以前没问题,这次出问题的原因,那就针对打包的报错找一下,看看org.osgi.service:org.osgi.service.prefs这个包为什么找不到。

去maven上一搜,好家伙,原来这个包的groupid是org.osgi。。。

问题总结

这么重要的问题不可能没人讨论,去github issue上一看,果然截止17号已经67个讨论,基本都是在说项目忽然不能用了,求解决

https://github.com/eclipse-equinox/equinox.bundles/issues/54

 其实问题就是出在范围依赖上,在6.14号org.eclipse.equinox.preferences发布了新版本3.10.0,里面就包含这次的错误,错误的将org.osgi的groupid写成了org.osgi.service,而eclipse.jdt的所有引入都是采用范围引入,不管你项目本身定义了什么版本,都会在打包时拉取这次的错误版本,导致了这次大规模的项目失败。

PS:官方在6.15号更新了3.10.1版本,修复了这次错误,但是基于上文说的坑,并没什么用,3.10.0存在的情况下就会直接报错。

所以理论上来说,只要项目用到了eclipse.jdt.core相关的,就会出现这次的问题。

解决方式

1、引入国外制作的BOM定义,锁死依赖

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>fr.jmini.ecentral</groupId>
      <artifactId>eclipse-platform-dependencies</artifactId>
      <version>4.14</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

2、仓库新增

既然你写错了org.osgi.service,那我就按照你的错建一个,在本地maven仓库按照错误的新建一个一样的目录,把包拖进去

3、排除错误依赖

<dependency>
    <groupId>org.eclipse.jdt</groupId>
    <artifactId>org.eclipse.jdt.core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.osgi.service</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值