maven版本依赖提供了方便的同时,有时候也会冒出一些诡异的问题。此次遇到的问题,比较简单,旨在记录,欢迎拍砖。
一、问题背景
由于使用了jekenis进行代码部署,所以maven的编译打包都会在这上面完成。在描述具体问题之前,我想先说一下打包的规则:项目A对外提供服务,A发布的包就会对外提供两个包(一个是api包即暴露的接口,一个是client包,封装了对api包的调用,将API包里面需要配置的服务端接口信息揉在一起。这样做的好处就是对客户端屏蔽zk上具体的接口信息)现在的问题是B项目依赖于A项目的client包,client包版本比较低,所以需要做升级。
二、问题描述
A项目中增加了methodA()方法,B项目需要升级client包,由于历史原因,api包的版本和client包版本不一致,此次升级顺便统一版本。当开心的提交完代码和单元测试,就等着jekenis构建了,结果跑单元测试的时候,发现如下问题:
看到如此画面,相信看异常堆栈已经能发现问题,缺少方法呗,但是明明写了呀,而且本地跑单元测试没问题。然后觉得可能是导包导的不对,但是看pom文件只依赖于client包,client包已经升级了,为什么还有问题
三、定位问题
带着疑问我怀疑是jekenis的问题(当然中间有很多弯路,加调试信息),我打开了jekenis的包依赖页面(没注意过?选择构建的项目,点进去后,有个See Fingerprints ,然后打开就是了)我搜索那个client包,发现旁边的api包版本仍然比较低,什么鬼,低版本的api包里肯定没有那个方法,然后点详细信息链接到A项目中去了,然后回到A项目查看依赖,改成新版本号后(下面的snapshot不规范,已修正),然并卵,怀疑是jekenis查找仓库仍然找的是老包,于是乎就想去jekenis对应的maven库里把相关的包都rm -rf 了,悲剧的是我还没有那台机器权限。。。。。
四、解决方案
既然已经猜到是包不对了,下面就是删包了,回想一下,jekenis是从私服上拉包,那在私服上直接干掉这个版本不就更新了,最后就这样给搞定了。不过还有其他一系列环境问题,不在此次讨论范围内,先不描述了
相关推荐
总结来说,解决Maven依赖冲突需要深入理解Maven的依赖管理和类加载机制。在本案例中,通过修改冲突依赖的类路径,可以实现多版本依赖的共存,但这种方式并不适用于所有场景,因此在实际应用中应谨慎考虑。在可能的...
对于第二类依赖冲突,同名类存在于多个不同的依赖 jar 包当中,这种情况是 Maven 无法解决的,因为 Maven 只会为你针对同一个 Jar 包的不同版本进行仲裁,而这俩是属于不同的 Jar 包,超出了 Maven 的依赖管理范畴。...
### Maven 类包冲突终极解决技巧详解 在软件开发过程中,Maven 作为一款流行的构建工具,在项目管理和构建自动化方面发挥着重要作用。然而,对于新手而言,Maven 的复杂性和广泛的功能可能会让人感到困惑,尤其是在...
2. 版本兼容性:需要确保离线包中的依赖版本与项目POM.xml中声明的版本匹配,否则可能会出现版本冲突。 3. 缺少依赖:如果项目需要的某个特定版本不在离线包中,仍需网络下载。 在实际开发中,为了更好地利用Maven...
MavenRunHelper插件的作用是帮助用户更轻松地在InteliJ IDEA中运行maven项目,它可以自动配置Maven运行环境,并且可以自动识别 maven项目的依赖关系,从而节省时间和精力。
总的来说,解决Maven依赖冲突需要理解其工作原理,结合IDEA提供的工具,如Maven Helper插件和依赖结构图,可以有效地定位和排除冲突,保持项目的稳定性和可维护性。在实际开发中,避免引入不必要的依赖和定期清理...
maven依赖冲突插件:idea依赖很多的时候 可以使用插件帮我们快速查看冲突的依赖 并快速的解决依赖
【Maven的依赖验证项目】是一个关于Maven项目管理和依赖管理的实践案例,它与CSDN博主songdeitao的一篇文章《Maven依赖管理详解》相关联。在这个项目中,我们将深入理解Maven如何处理项目的依赖关系,以及如何有效地...
这大大简化了项目的构建过程,但同时也可能导致依赖冲突,需要通过排除机制或调整依赖版本来解决。 在`<dependency>`标签内,还可以添加`<exclusions>`子标签来排除特定的依赖,避免冲突。例如: ```xml ...
maven依赖冲突及解决方法 maven依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突。这种情况下,项目可能会出现无法编译或运行的错误。 依赖冲突的原因: 依赖冲突很经常是类包之间的...
本插件参考58开源插件MavenManager,采用dependencyManagement方式,一键解决Java开发过程中使用maven作为依赖管理时的jar包依赖冲突问题,相比MavenHelper更加省时省力,jar包版本采用最新版本号原则
这款插件专为IntelliJ IDEA设计,旨在帮助开发者轻松解决Maven依赖冲突问题,提高开发效率。 **MavenHelper插件介绍** MavenHelper是一款强大的IDEA插件,它的主要功能是分析和可视化Maven项目的依赖树,帮助开发者...
如果有版本冲突,Maven会根据依赖管理的原则进行解决,通常遵循“最近优先”原则。 5. **仓库**:Maven依赖的存储库,包括本地仓库(默认在用户目录下)和远程仓库(如中央仓库mvnrepository.com)。当本地仓库没有...
这在排查依赖冲突或理解项目依赖关系时非常有用。 除了Maven的默认仓库外,还可以通过`<repository>`标签添加自定义的远程仓库地址,这对于处理公司内部私有库或者第三方库的非中央仓库发布的情况非常关键。 在...
IDEA+Maven导入新包JDK版本冲突问题解决方案 IDEA 和 Maven 是 Java 开发中常用的集成开发环境和项目管理工具,但是当我们在 IDEA 中使用 Maven 管理项目时,可能会遇到 JDK 版本冲突问题。今天我们将讨论如何解决...
6. **依赖冲突解决**:Maven采用"最接近原则"解决依赖冲突,即当两个或更多依赖引入相同jar的不同版本时,会选择离当前模块最近的版本。 7. **聚合与继承**:聚合(aggregation)允许一个项目包含其他项目,而继承...
依赖调解是Maven解决依赖冲突的机制。当一个项目中引入了两个具有相同坐标但版本不同的依赖项时,Maven会根据一定的规则选择其中一个版本。Maven的依赖调解规则包括:短距离优先原则和声明优先原则。短距离优先原则...
这包括了自动下载所需库、解决依赖冲突以及执行构建生命周期中的各种任务。 **2. Spring Framework 5.2.x的新特性** - **反应式编程支持**:Spring 5.2.x引入了对Reactor的支持,这是Spring WebFlux框架的一部分,...
3. **依赖管理**:3.5.2增强了依赖解析机制,能更准确地处理传递性依赖,避免了版本冲突。 4. **错误修复**:此版本修复了多个已知问题,提升了Maven的稳定性和可靠性。 要下载Maven的历史版本,可以访问Apache ...