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

简介: 你不知道的小技巧:轻松解决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

91.png

3、查看版本依赖

90.png

可以很清楚的看出,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包冲突的几种解决方式。


目录
相关文章
|
1月前
|
Java Maven
maven依赖原则以及jar包冲突
该文介绍了Maven依赖原则:最短路径优先,申明顺序优先和覆写优先。当有冲突时,Maven选择路径最短的版本,按POM中声明顺序加载,并且子POM的依赖优先于父POM。解决冲突最佳方式是通过`mvn dependency:tree`检查依赖树并调整POM文件中的坐标顺序。
28 2
|
1天前
|
Java Go Maven
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录(二)
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录
10 0
|
1天前
|
Java Maven
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录(一)
向 Maven 中央仓库上传一个修改过的基于jeecg的autoPOI的 jar包记录
15 0
|
4天前
|
Java 项目管理 Maven
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
Maven的聚合和继承是Java开发中重要的概念。聚合允许将多个项目组合成一个构建单元,简化多模块项目的构建过程,提高构建效率。继承则让子项目重用父项目的配置和属性,避免了重复定义,增强了项目的一致性和可维护性。通过聚合和继承,Maven为多模块项目的构建和管理提供了高效且灵活的支持,减少了配置冗余,提升了开发效率。
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
|
7天前
|
Java Maven
Maven 引入外部依赖
在 Maven 项目中引入 LDAP 操作库 ldapjdk.jar,需将 jar 文件放入 src/lib 文件夹,并在 pom.xml 的 dependencies 部分添加依赖配置
|
10天前
|
Java Maven Spring
Maven 依赖搜索顺序
Maven在构建时按顺序搜索本地-&gt;中央仓库-&gt;已配置的远程仓库来查找依赖。若未设置远程仓库,会报错。可将默认仓库替换为阿里云仓库,通过修改settings.xml的mirrors节点或在repositories节点添加仓库地址。在pom.xml中指定依赖后,运行`mvn install`拉取。
|
25天前
|
Java Apache 项目管理
使用Maven进行Java项目构建与依赖管理
【4月更文挑战第16天】Apache Maven是Java项目的核心构建工具,它基于POM进行项目管理和构建自动化,简化构建过程并管理依赖。Maven提供标准化的目录结构、自动依赖解决、丰富的插件生态、多模块构建支持和版本管理功能。通过安装Maven、创建项目、配置依赖、构建及使用插件,开发者能高效管理Java项目,提升开发效率。了解和掌握Maven对于Java开发者至关重要。
|
29天前
|
Java Maven 数据安全/隐私保护
如何上传自己的Jar到Maven中央仓库
如何上传自己的Jar到Maven中央仓库
47 0
|
29天前
|
Java 应用服务中间件 Maven
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
使用IDEA搭建SpringMVC环境,Maven导入了依赖,但是运行报错 java.lang.ClassNotFoundException
20 1
|
1月前
|
Java Maven
SpringMVC常用Maven POM.xml依赖包片段
SpringMVC常用Maven POM.xml依赖包片段

热门文章

最新文章

推荐镜像

更多