IDEA 中maven依赖升级版本代码还是旧版本的

8,452 阅读3分钟

一、SNAPSHOT升级版本,依赖中仍然是旧代码

问题原因

问题是这样的,我自己向公司的私服上传了一个SNAPSHOT依赖包,然后做测试。

因为这个版本的SNAPSHOT的包测试没通过,需要重新打一个修改后的新的SNAPSHOT包继续进行测试。

然后,在项目中点击reload all maven projecets

image.png

结果在测试打断点时发现引入的依赖里面的仍然是旧版本的代码。当时尝试了很多次,确实很崩溃。

经过高人指点,我才明白此时pom依赖的版本号未改变。此时本地有同版本的依赖存在,所以就不会向私服拉取同版本的依赖,自然依赖没有更新。

解决方案

查看本地仓库目录后删除本地依赖包,让maven再去拉一次,就肯定是新版本的代码了。 具体目录寻找方式举例:

image.png

image.png 直接把这个文件夹删掉即可。

二、正式包升级版本号,还是用旧版本的依赖

问题原因

项目版本升级用了正式版本(不是SNAPSHOT),但是发布以后,项目依赖的jar包在编译以后的lib目录还是旧版本。

不是SNAPSHOT这样相同版本号的情况,我是真的没想到也能遇到。没办法,继续请教高人指点。

这次的原因是高人的解释也有点含糊不清。

  1. 可能是就版本的依赖在上面仍然引用了,引入的新包的优先级不如旧版本。(后续经过排查,不是这个原因)

  2. 可能是maven存在缓存机制,此时虽然引入了新版本,但是缓存更新可能存在bug,没有及时更新。(我非常怀疑就是因为这个原因)

后续,我们发现在项目的 External Libraries 里的依赖版本还是旧的,没有更新,很可能就是以上第二个情况造成的。

但是,我尝试了reload、mvn clean,甚至为了清空缓存重启了IDEA,按照常理此时应该就能触发更新缓存了。但是,可能真的是bug吧。

解决方案

亲测有效

仍然是简单粗暴的detele,不过这次有两种方案可选。总体来说都是删除旧版本然后引进新版本。

  1. 点击 External Libraries 里的旧版 jar,直接 delete。然后点maven中reload all maven projecets进行更新。
  2. 仍然是老方法,在本地目录直接把旧版本的删掉。需要注意的是不要点maven中reload all maven projecets进行更新。不然旧版本还会下载下来(所以我非常怀疑就是bug)

时灵时不灵

同时,我在网上查到了另一种方法有的时候管用,有的时候又不太好用,仅供参考。

首先Unlink Maven Projects image.png

然后,Add as Maven Project image.png

参考文章

java - IDEA中通过maven更新依赖版本(手动强制更新依赖) - 个人文章 - SegmentFault 思否

idea强制更新Maven依赖包 - 逃跑旅馆 - 博客园 (cnblogs.com)

Pom 中更新依赖版本后,Idea 中的依赖版本未更新,还是旧的_pom变化,但版本不更新-CSDN博客