你不知道的小技巧:轻松解决maven中jar包依赖问题

前言

大家在项目开发过程中,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版本。

<!--nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>

二、解决

知道是引入的jar包冲突问题。那么我们需要引入什么版本的jar,才不会不限jar包冲突了,很多人可能说查看官网。
nacos的官网版本对应说明:wiki

相信很多人和我一样,看的一头雾水雾水。看完后,还是不知道具体的版本对应关系。

下面开始说下我的解决办法。
1、访问maven仓库官方地址https://mvnrepository.com/

2、搜索对应的依赖包:spring-cloud-starter-alibaba-nacos-config
在这里插入图片描述
3、查看版本依赖
在这里插入图片描述
可以很清楚的看出,spring-cloud-starter-alibaba-nacos-config的2.2.1.RELEASE版本依赖的是spring-boot-starter-parent的2.2.5.RELEASE版本。

4、调整对应的版本依赖
刷新pom文件重新加载依赖,问题解决。

三、其他

分享一些其他maven冲突的解决tip:
1、通过idea中的Maven Helper插件分析jar包冲突
2、通过dependencyManagement管理引入的jar包的版本

//版本管理,不引入jar 包
<dependencyManagement>  
      <dependencies>  
            <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
                <version>3.2.7</version>  
            </dependency>  
    </dependencies>  
</dependencyManagement>  

//实际引用的jar包 
<dependencies>  
       <dependency>  
                <groupId>org.springframework</groupId>  
                <artifactId>spring-core</artifactId>  
       </dependency>  
</dependencies>  

注意:
jar的版本判断的两种途径:

  • 如果dependencies里的dependency自己没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version。

  • 如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

3、通过exclusion排除依赖

<dependency>
	<groupId>com.test.pmall</groupId>
	<artifactId>poms-affair-common</artifactId>
	<version>1.0.2-SNAPSHOT</version>
	<exclusions>
		<exclusion>
    		<groupId>com.test.pmall</groupId>
    		<artifactId>poms-base-common</artifactId>
    	</exclusion>
	</exclusions>
</dependency>

总结

本文主要是给大家分享了一个在使用maven过程中解决jar包依赖问题的一个小技巧:通过maven仓库官网查看依赖的jar包的版本号。
然后扩展介绍了一下常用的maven中jar包冲突的几种解决方式。

如果对你所有帮助,欢迎点赞关注。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斗者_2013

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值