文章目录

  • 1. jar包冲突问题
  • 2. 解决办法
    • 2.1 Maven Helper插件
      • 2.1.1 安装 Maven Helper 插件
      • 2.1.2 pom.xml 依赖冲突分析
        • 2.1.2.1 打开依赖分析界面
        • 2.1.2.2 查看冲突分析结果
    • 2.2 Maven 的 enforcer 插件
      • 2.2.1 引入 netty 依赖
      • 2.2.2 配置 enforcer 插件
      • 2.2.3 测试
  • 3. 引入非Maven jar包
    • 3.1 将该 jar 包安装到 Maven 仓库

1. jar包冲突问题

在日常开发中,团队中每个程序员都需要自己去找依赖,即使是做同一个项目,每个模块也各加各的依赖,没有统一管理。但一旦依赖确定下来,把这些依赖放在父工程中做依赖管理,各个子模块各取所需,这样基本上就能很好的避免问题的扩散。

2. 解决办法

不管具体使用的是什么工具,基本思路无非是这么两步:

  • 把彼此冲突的 jar 包找到
  • 在冲突的 jar 包中选定一个,具体做法无非是通过 exclusions 排除依赖,或是明确声明依赖。

2.1 Maven Helper插件

这个插件是 IDEA 中安装的插件,不是 Maven 插件。它能够罗列出来同一个 jar 包的不同版本,以及它们的来源,但是对不同 jar 包中同名的类没有办法。

2.1.1 安装 Maven Helper 插件

装完要重启Idea

2.1.2 pom.xml 依赖冲突分析

2.1.2.1 打开依赖分析界面

注意:这个功能需要安装了 IDEAMaven helper 插件才有。

2.1.2.2 查看冲突分析结果

2.2 Maven 的 enforcer 插件

使用 Mavenenforcer 插件既可以检测同一个 jar 包的不同版本,又可以检测不同 jar 包中同名的类。

2.2.1 引入 netty 依赖

这里引入两个对 netty 的依赖,展示不同 jar 包中有同名类的情况。

<dependencies><dependency><groupId>org.jboss.netty</groupId><artifactId>netty</artifactId><version>3.2.10.Final</version></dependency><dependency><groupId>io.netty</groupId><artifactId>netty</artifactId><version>3.9.2.Final</version></dependency>
</dependencies>

2.2.2 配置 enforcer 插件

<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-enforcer-plugin</artifactId><version>1.4.1</version><executions><execution><id>enforce-dependencies</id><phase>validate</phase><goals><goal>display-info</goal><goal>enforce</goal></goals></execution></executions><dependencies><dependency><groupId>org.codehaus.mojo</groupId><artifactId>extra-enforcer-rules</artifactId><version>1.0-beta-4</version></dependency></dependencies><configuration><rules><banDuplicateClasses><findAllDuplicates>true</findAllDuplicates></banDuplicateClasses></rules></configuration></plugin></plugins></pluginManagement>
</build>

2.2.3 测试

执行如下 Maven 命令:mvn clean package enforcer:enforce
部分运行结果:

[INFO] --- maven-enforcer-plugin:1.4.1:enforce (default-cli) @ pro32-duplicate-class ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.BanDuplicateClasses failed with message:
Duplicate classes found:Found in:
io.netty:netty:jar:3.9.2.Final:compile
org.jboss.netty:netty:jar:3.2.10.Final:compile
Duplicate classes:
org/jboss/netty/channel/socket/ServerSocketChannelConfig.class
org/jboss/netty/channel/socket/nio/NioSocketChannelConfig.class
org/jboss/netty/util/internal/jzlib/Deflate.class
org/jboss/netty/handler/codec/serialization/ObjectDecoder.class
org/jboss/netty/util/internal/ConcurrentHashMap$HashIterator.class

3. 引入非Maven jar包

Maven 工程中用到的 jar 包通常都是通过 Maven 本身的机制导入进来的,而实际开发中确实有可能用到一些 jar 包并非是用 Maven 的方式发布,那自然也没法通过 Maven 导入。

3.1 将该 jar 包安装到 Maven 仓库

使用 install 插件的 install-file 目标:

mvn install:install-file -Dfile=[体系外 jar 包路径] \
-DgroupId=[给体系外 jar 包强行设定坐标] \
-DartifactId=[给体系外 jar 包强行设定坐标] \
-Dversion=1 \
-Dpackage=jar

例如(Windows 系统下使用 ^ 符号换行;Linux 系统用 \):

mvn install:install-file -Dfile=D:\idea\maven-outer\maven-outer.jar ^
-DgroupId=com.scorpios.maven ^
-DartifactId=maven-outer ^
-Dversion=1 ^
-Dpackaging=jar

执行完上述命令后,会把非Mavenjar安装到本地仓库中,并会生成相应的pom文件,这样就可以在Maven项目中进行引入

Maven之jar包冲突引入非第三方jar相关推荐

  1. Eclipse中要导出jar包中引用了第三方jar包怎么办

    Eclipse中要导出jar包中引用了第三方jar包怎么办 (2009-07-20 15:28:44) 转载▼ 标签: it 分类: Eclipse     今天做个小的java程序,想要先将其导出成 ...

  2. Maven构建聚合工程以及jar包冲突解决使用总结

    一.聚合工程 如图所示: SpringCloud_CH3为聚合工程,eurekaclientarticleservice为被聚合工程. 聚合工程为一个maven工程:聚合类的pom.xml文件为: & ...

  3. Jar包冲突解决方法 Unknown lifecycle phase mvn Eclipse中执行maven命令

    1.如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..." 进行如上操 ...

  4. axis2 jar包冲突_一个jar包冲突引起的StackOverflowError

    项目运行中错误信息:java.lang.IllegalStateException: Unable to complete the scan for annotations for web appli ...

  5. 系统重构:从Jar包冲突搞到类加载机制,就是这么霸气

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  6. 霸气的来了:从Jar包冲突搞到类加载机制!

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  7. 就是这么zhuai,从Jar包冲突搞到类加载机制

    接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...

  8. Jar包冲突解决方法

    前言 对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类.方法等,或者有时遇到一些日志系统的问题(参考另一篇文章Jar包冲突导致的日志问题),我们会遇到ClassNotFo ...

  9. Maven中 jar包冲突原理与解决办法依赖传递

    Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...

最新文章

  1. 用python画皮卡丘代码-利用Python绘制萌萌哒的皮卡丘
  2. 【PC工具】更新文件夹多文件群体比较工具WinMerge
  3. 【Linux】17.Ubuntu16.04 系统添加网关和DNS的两种方式
  4. iphone开发笔记
  5. 软件测试作业8:分析自动售货机软件例子生成的判定表图例
  6. 世界杯千万级直播高稳定的挑战和实践
  7. Flask-SQLAlchemy 对数据库的增查改删
  8. 配置Apache Httpd Server 2.2 Virtual Host UrlRewrite
  9. Nacos源码系列之服务发现(二)
  10. 【python初学者日记】selenium初体验——“秒杀商品”、“清空购物车”技能养成记(一)
  11. tf.expand_dims()和tf.squeeze()的用法详解
  12. C. Keshi Is Throwing a Party(二分答案),最/佳牛围栏,average。
  13. 2018年计算机考研调剂信息概况
  14. CGB2109-Day01
  15. 落叶几度夕阳红,门掩深林中
  16. 自动化测试之Python+selenium
  17. 计算机语言的文体特点,网络语言文体特征
  18. 全球及中国SaaS(软件运营服务)市场竞争态势预测及未来发展走势分析报告2021-2027年
  19. ffmpeg 视频裁剪 命令行+C实现(无B帧视频)
  20. edis学习记录02-redis基础数据类型命令

热门文章

  1. oracle drop tablespace 恢复杀手锏
  2. 产量预测文献读后整理
  3. 计算机科学与技术本科相当于计算机几级,软件工程的学生毕业后计算机等级算几级?...
  4. 宇宙最全面试题目实录(二)
  5. WPS格式转换成html代码
  6. 微信云函数的使用步骤
  7. 妙啊!用扩散模型生成蛋白质结构,结果不输天然蛋白质|来自斯坦福微软
  8. effective c++ 学习笔记之 Shifting from c to c++
  9. PrimoCache2.2.0汉化程序与2.0.0的交叉使用
  10. 虚拟硬盘 服务器 破解,服务器版虚拟硬盘_Primo Ramdisk Server Edition V5.6.1 免费版