热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

前言大家在项目开发过程中,jar包冲突一定是大家最讨厌的一个问题。究其原因一个是根据异常提示信息一般很难定位问题,其次明知道可能是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版本。


<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;欢迎点赞关注。


推荐阅读
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有