前言
大家在项目开发过程中,jar包冲突一定是大家最讨厌的一个问题。究其原因一个是根据异常提示信息一般很难定位问题,其次明知道可能是jar包冲突问题但是却不知道究竟需要引入哪个对应的版本。今天教大家一个小技巧,轻松解决让你头痛的maven引起依赖的版本冲突问题。
一、问题
最近nacos作为微服务项目中的注册中心和配置中心越来越流行,自己尝试这研究下,结果项目启动一直出现异常:
BeanCreationException: Error creating bean with name ‘nacosProperties‘ defined in class。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'nacosProperties' defined in class path resource [com/alibaba/cloud/nacos/discovery/NacosDiscoveryAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.alibaba.cloud.nacos.NacosDiscoveryProperties] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
经过谷歌查询资料发现,都反应是jar包冲突问题。
下面是我引入的spring-cloud-starter-alibaba-nacos-config版本。
<dependency><groupId>com.alibaba.cloudgroupId><artifactId>spring-cloud-starter-alibaba-nacos-configartifactId><version>2.2.1.RELEASEversion>
dependency>
二、解决
知道是引入的jar包冲突问题。那么我们需要引入什么版本的jar&#xff0c;才不会不限jar包冲突了&#xff0c;很多人可能说查看官网。
nacos的官网版本对应说明&#xff1a;wiki
相信很多人和我一样&#xff0c;看的一头雾水雾水。看完后&#xff0c;还是不知道具体的版本对应关系。
下面开始说下我的解决办法。
1、访问maven仓库官方地址&#xff1a;https://mvnrepository.com/
2、搜索对应的依赖包&#xff1a;spring-cloud-starter-alibaba-nacos-config
3、查看版本依赖
可以很清楚的看出&#xff0c;spring-cloud-starter-alibaba-nacos-config的2.2.1.RELEASE版本依赖的是spring-boot-starter-parent的2.2.5.RELEASE版本。
4、调整对应的版本依赖
刷新pom文件重新加载依赖&#xff0c;问题解决。
三、其他
分享一些其他maven冲突的解决tip&#xff1a;
1、通过idea中的Maven Helper插件分析jar包冲突
2、通过dependencyManagement管理引入的jar包的版本
//版本管理&#xff0c;不引入jar 包
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-coreartifactId> <version>3.2.7version> dependency> dependencies>
dependencyManagement> //实际引用的jar包
<dependencies> <dependency> <groupId>org.springframeworkgroupId> <artifactId>spring-coreartifactId> dependency>
dependencies>
注意&#xff1a;
jar的版本判断的两种途径&#xff1a;
-
如果dependencies里的dependency自己没有声明version元素&#xff0c;那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明&#xff0c;如果有&#xff0c;就继承它&#xff0c;如果没有就会报错&#xff0c;告诉你必须为dependency声明一个version。
-
如果dependencies中的dependency声明了version&#xff0c;那么无论dependencyManagement中有无对该jar的version声明&#xff0c;都以dependency里的version为准。
3、通过exclusion排除依赖
<dependency><groupId>com.test.pmallgroupId><artifactId>poms-affair-commonartifactId><version>1.0.2-SNAPSHOTversion><exclusions><exclusion><groupId>com.test.pmallgroupId><artifactId>poms-base-commonartifactId>exclusion>exclusions>
dependency>
总结
本文主要是给大家分享了一个在使用maven过程中解决jar包依赖问题的一个小技巧&#xff1a;通过maven仓库官网查看依赖的jar包的版本号。
然后扩展介绍了一下常用的maven中jar包冲突的几种解决方式。
如果对你所有帮助&#xff0c;欢迎点赞关注。