Maven之jar包冲突引入非第三方jar
文章目录
- 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 打开依赖分析界面
注意:这个功能需要安装了
IDEA
的Maven helper
插件才有。
2.1.2.2 查看冲突分析结果
2.2 Maven 的 enforcer 插件
使用 Maven
的 enforcer
插件既可以检测同一个 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
执行完上述命令后,会把非Maven
的jar
安装到本地仓库中,并会生成相应的pom
文件,这样就可以在Maven
项目中进行引入
Maven之jar包冲突引入非第三方jar相关推荐
- Eclipse中要导出jar包中引用了第三方jar包怎么办
Eclipse中要导出jar包中引用了第三方jar包怎么办 (2009-07-20 15:28:44) 转载▼ 标签: it 分类: Eclipse 今天做个小的java程序,想要先将其导出成 ...
- Maven构建聚合工程以及jar包冲突解决使用总结
一.聚合工程 如图所示: SpringCloud_CH3为聚合工程,eurekaclientarticleservice为被聚合工程. 聚合工程为一个maven工程:聚合类的pom.xml文件为: & ...
- Jar包冲突解决方法 Unknown lifecycle phase mvn Eclipse中执行maven命令
1.如下图,右击需要执行maven命令的工程,选择"Debug As"或"Run As",再选择"Maven build..." 进行如上操 ...
- axis2 jar包冲突_一个jar包冲突引起的StackOverflowError
项目运行中错误信息:java.lang.IllegalStateException: Unable to complete the scan for annotations for web appli ...
- 系统重构:从Jar包冲突搞到类加载机制,就是这么霸气
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...
- 霸气的来了:从Jar包冲突搞到类加载机制!
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...
- 就是这么zhuai,从Jar包冲突搞到类加载机制
接手了一套比较有年代感的系统,计划把重构及遇到的问题写成系列文章,老树发新枝,重温一些实战技术,分享给大家.[重构01篇],给大家讲讲Jar包冲突及原理. 背景 目前市面上项目管理要么是基于Maven ...
- Jar包冲突解决方法
前言 对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类.方法等,或者有时遇到一些日志系统的问题(参考另一篇文章Jar包冲突导致的日志问题),我们会遇到ClassNotFo ...
- Maven中 jar包冲突原理与解决办法依赖传递
Maven中 jar包冲突原理与解决办法&依赖传递 管理包依赖是 Maven 核心功能之一,下面通过如何引入 jar 包:如何解析 jar 包依赖:包冲突是如何产生:如何解决包冲突:依赖管理解 ...
最新文章
- 用python画皮卡丘代码-利用Python绘制萌萌哒的皮卡丘
- 【PC工具】更新文件夹多文件群体比较工具WinMerge
- 【Linux】17.Ubuntu16.04 系统添加网关和DNS的两种方式
- iphone开发笔记
- 软件测试作业8:分析自动售货机软件例子生成的判定表图例
- 世界杯千万级直播高稳定的挑战和实践
- Flask-SQLAlchemy 对数据库的增查改删
- 配置Apache Httpd Server 2.2 Virtual Host UrlRewrite
- Nacos源码系列之服务发现(二)
- 【python初学者日记】selenium初体验——“秒杀商品”、“清空购物车”技能养成记(一)
- tf.expand_dims()和tf.squeeze()的用法详解
- C. Keshi Is Throwing a Party(二分答案),最/佳牛围栏,average。
- 2018年计算机考研调剂信息概况
- CGB2109-Day01
- 落叶几度夕阳红,门掩深林中
- 自动化测试之Python+selenium
- 计算机语言的文体特点,网络语言文体特征
- 全球及中国SaaS(软件运营服务)市场竞争态势预测及未来发展走势分析报告2021-2027年
- ffmpeg 视频裁剪 命令行+C实现(无B帧视频)
- edis学习记录02-redis基础数据类型命令
热门文章
- oracle drop tablespace 恢复杀手锏
- 产量预测文献读后整理
- 计算机科学与技术本科相当于计算机几级,软件工程的学生毕业后计算机等级算几级?...
- 宇宙最全面试题目实录(二)
- WPS格式转换成html代码
- 微信云函数的使用步骤
- 妙啊!用扩散模型生成蛋白质结构,结果不输天然蛋白质|来自斯坦福微软
- effective c++ 学习笔记之 Shifting from c to c++
- PrimoCache2.2.0汉化程序与2.0.0的交叉使用
- 虚拟硬盘 服务器 破解,服务器版虚拟硬盘_Primo Ramdisk Server Edition V5.6.1 免费版