一、SNAPSHOT升级版本,依赖中仍然是旧代码
问题原因
问题是这样的,我自己向公司的私服上传了一个SNAPSHOT依赖包,然后做测试。
因为这个版本的SNAPSHOT的包测试没通过,需要重新打一个修改后的新的SNAPSHOT包继续进行测试。
然后,在项目中点击reload all maven projecets
结果在测试打断点时发现引入的依赖里面的仍然是旧版本的代码。当时尝试了很多次,确实很崩溃。
经过高人指点,我才明白此时pom依赖的版本号未改变。此时本地有同版本的依赖存在,所以就不会向私服拉取同版本的依赖,自然依赖没有更新。
解决方案
查看本地仓库目录后删除本地依赖包,让maven再去拉一次,就肯定是新版本的代码了。 具体目录寻找方式举例:
二、正式包升级版本号,还是用旧版本的依赖
问题原因
项目版本升级用了正式版本(不是SNAPSHOT),但是发布以后,项目依赖的jar包在编译以后的lib目录还是旧版本。
不是SNAPSHOT这样相同版本号的情况,我是真的没想到也能遇到。没办法,继续请教高人指点。
这次的原因是高人的解释也有点含糊不清。
-
可能是就版本的依赖在上面仍然引用了,引入的新包的优先级不如旧版本。(后续经过排查,不是这个原因)
-
可能是maven存在缓存机制,此时虽然引入了新版本,但是缓存更新可能存在bug,没有及时更新。(我非常怀疑就是因为这个原因)
后续,我们发现在项目的 External Libraries 里的依赖版本还是旧的,没有更新,很可能就是以上第二个情况造成的。
但是,我尝试了reload、mvn clean,甚至为了清空缓存重启了IDEA,按照常理此时应该就能触发更新缓存了。但是,可能真的是bug吧。
解决方案
亲测有效
仍然是简单粗暴的detele,不过这次有两种方案可选。总体来说都是删除旧版本然后引进新版本。
- 点击 External Libraries 里的旧版 jar,直接 delete。然后点maven中
reload all maven projecets进行更新。 - 仍然是老方法,在本地目录直接把旧版本的删掉。需要注意的是不要点maven中
reload all maven projecets进行更新。不然旧版本还会下载下来(所以我非常怀疑就是bug)
时灵时不灵
同时,我在网上查到了另一种方法有的时候管用,有的时候又不太好用,仅供参考。
首先Unlink Maven Projects
然后,Add as Maven Project
参考文章
java - IDEA中通过maven更新依赖版本(手动强制更新依赖) - 个人文章 - SegmentFault 思否