排查maven 冲突及办理方式

打印 上一主题 下一主题

主题 1930|帖子 1930|积分 5790

Maven

Maven 是一个以项目为中央的自动化构建工具,主要用于Java项目的管理和构建。它提供了一种统一的方式来描述项目的结构、依赖关系和构建过程,简化了项目的构建和管理。
Maven 的主要特点:


  • 项目对象模子(POM):Maven 使用pom.xml文件来界说项目的依赖、插件和构建配置。POM 是 Maven 项目的核心,描述了项目的基本信息。
  • 依赖管理:Maven 答应开发者轻松地管理项目所需的库和框架。通过声明依赖,Maven 会自动下载所需的库及其依赖项,办理版本冲突。
  • 插件体系:Maven 提供了丰富的插件,可以在构建过程中实行各种任务,例如编译代码、打包、运行测试等。
  • 生命周期管理:Maven 通过界说项目的生命周期来规范构建过程,主要包含清理、编译、测试、打包、摆设等阶段。
  • 多模块项目支持:Maven 支持多模块项目,答应将相干模块组织在同一个项目结构中,方便管理和构建。
  • 社区支持:Maven 拥有庞大的社区支持,提供了大量的插件和资源,帮助开发者高效开展工作。
1. 常见的依赖冲突报错

1.1、版本冲突报错
  1. [WARNING] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
  2. [WARNING]
  3. [WARNING]   org.apache.commons:commons-lang3:jar:3.4 is referenced from more than one dependency.
  4. [WARNING]     - org.apache.commons:commons-lang3:jar:3.4 (compile)
  5. [WARNING]     - org.apache.commons:commons-lang3:jar:3.5 (compile)
复制代码
1.2、类找不到或方法找不到
NoClassDefFoundError 或者 ClassNotFoundException或者 NoSuchMethodException
  1. 常见但不仅限于以下异常:
  2. java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  3. 或者   
  4. java.lang.NoSuchMethodError: org.apache.commons.lang3.StringUtils.isBlank(Ljava/lang/CharSequence;
  5. NoSuchMethodException
  6. 依赖冲突可能会间接导致 NoSuchMethodException。例如:
  7.    
  8. 不同版本的库:如果项目中引入了同一库的不同版本,Maven 可能会选择一个版本,而这个版本中可能缺少某些方法,从而在运行时导致 NoSuchMethodException。
  9. 依赖传递:某些依赖可能会引入其他库的特定版本,如果这些版本之间存在不兼容的方法,也可能导致 NoSuchMethodException。   
复制代码
1.3、依赖树中的冲突
  1. 例如:
  2. [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.3.4.RELEASE:compile
  3. [INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.3.4.RELEASE:compile
  4. [INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.3.4.RELEASE:compile
  5. [INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.3.4.RELEASE:compile
  6. [INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.3.4.RELEASE:compile
  7. [INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile
  8. [INFO] |  |  |  |  +- ch.qos.logback:logback-core:jar:1.2.3:compile
  9. [INFO] |  |  |  |  \- org.slf4j:slf4j-api:jar:1.7.30:compile
  10. [INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.13.3:compile
  11. [INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.13.3:compile
  12. [INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.30:compile
  13. [INFO] |  |  +- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
  14. [INFO] |  |  +- org.springframework:spring-core:jar:5.2.9.RELEASE:compile
  15. [INFO] |  |  |  \- org.springframework:spring-jcl:jar:5.2.9.RELEASE:compile
复制代码
2、排查maven 依赖是否冲突

2.1、pom 依赖,这里展示部门依赖进行拆解

2.2、使用idea 自带工具进行排查分析:红色的线就表示冲突了。

2.3、使用工具 :maven helper
起首我使用的idea工具,可以安装插件maven helper,

2.4、重启idea
这玩意装好,我们关闭窗口,有大概会叫你restart一下,你就乖乖听话。之后我们打开pom文件并且点击依赖分析。切换到:Dependency Analyzer

3、分析冲突

3.1、点击右键---》Jump to Source 就会跳回到自己的pom 文件(我这跳转到 56 行)

这个时间我们可以一直向下点击,去看 mybatis 3.5.14 依赖路径和 mybatis 3.5.15   冲突依赖路径版本

4、办理办法

统共有四种办理方式:
1,第一声明优先原则

在pom.xml配置文件中,假如有两个名称相同版本差别的依赖声明,那么先写的会生效(同个pom.xml文件)。
所以,先声明自己要用的版本的jar包即可。
2,路径近者优先

直接依赖优先于通报依赖,假如通报依赖的jar包版本冲突了,那么可以自己声明一个指定版本的依赖jar,即可办理冲突。
3,排除原则

通报依赖冲突时,可以在不必要的jar的通报依赖中声明排除,从而办理冲突。

在pom 文件就会自动生成 排除标识
  1. <dependency>
  2.             <groupId>com.baomidou</groupId>
  3.             <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  4.             <version>3.5.5</version>
  5.             
  6.             <exclusions>
  7.                 <exclusion>
  8.                     <artifactId>mybatis</artifactId>
  9.                     <groupId>org.mybatis</groupId>
  10.                 </exclusion>
  11.             </exclusions>
  12.         </dependency>
复制代码
结果:

刷新:先返回去pom 点击刷新,然后在 maven help 里面点击 Refresh UI


最后依赖冲突只剩三个

4,版本锁定原则

在配置文件pom.xml中先声明要使用哪个版本的相应jar包,声明后其他版本的jar包一律不依赖。办理了依赖冲突。
  1. <dependencyManagement>
  2.         <dependencies>
  3.             <dependency>
  4.                 <groupId>org.mybatis</groupId>
  5.                 <artifactId>mybatis</artifactId>
  6.                 <version>3.5.14</version>
  7.             </dependency>
  8.         </dependencies>
  9.     </dependencyManagement>
复制代码
结果:依旧可以排撤消依赖冲突

最后文章有啥不对,接待大佬指点!!!
假如感觉对你有帮助就点赞推荐或者关注一下吧!!!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表