Maven怎么处理引用的jar版本冲突
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven怎么处理引用的jar版本冲突相关的知识,希望对你有一定的参考价值。
1.确定出了问题的jar包名称。通常可以在eclipse中查找冲突的类有在哪些依赖包里面出现了。并确定实际要使用的是那个包,冲突的包有哪些。 2.通过mvn dependency:tree > tree.txt 导出全部的依赖。 3.在导出的依赖文件中,查找问题相关的jar。确定这些jar是如何被依赖进来的,是直接依赖的还是通过传递依赖引入的。 4. 找到相互冲突的并需要排除的依赖的顶级依赖,并分析冲突的原因,冲突的原因可能是以下几种: 同一个jar包但groupId, artifactId不同,这种冲突只能通过设定依赖的<exclusions> 来进行排除 需要的版本jar包依赖路径较长,这种冲突可以把想要版本的依赖直接什么在依赖中,这样路径就最短了优先级最高。 5.最后可以通过打包mvn install 来确认打出来的war包中是否有被排除的依赖。 参考技术A 把jar改为你本地的最高版本,把低版本删除如何配置maven pom文件来解决jar包冲突
maven3在解决依赖冲突采用就近原则,在就近原则不能做出判断的情况下依据pom.xml的声明的先后顺序决定导入的jar。
jar包冲突多为传递性依赖的管理不当给项目带来的麻烦解决思路罗列如下:
1、首先查看当前项目的jar关系如果使用eclipse、idea等编辑器可打开pom.xml文档底部有Dependency Hierarchy可供查看jar的依赖情况。第二种使用maven插件的方式使用命令行:
mvn dependency:tree结果中重要的是两个部分,首先是Used undeclared dependencies意值项目中使用到的,但是没有显示声明的依赖。这种依赖意味着潜在的风险。他是通过其他直接依赖导入的传递性依赖,当直接依赖升级时相关依赖的版本也会变化。可能导致当前项目报错,且不易察觉。另一个部分是Unused declared dependencies意指项目中未使用的,但显式声明的依赖。需要注意的是我们不应该直接删除了事而是应该仔细分析。因为这个命令行发现不了执行测试和运行时需要的依赖。
以上方法都可可完整的查看当前项目的jar情况,个人更喜欢使用命令行。
2、通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的jar;语法如下:
<dependency><groupId>.....</grooupId>
<artifactId>....</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>.....</groupId>
<artifactId>.....</artifactId>
</exclusion>
</exclesions>
<dependency>
<!--exclusions可包含一个或多个exclusion元素-->
3、一下规避jar冲突的思路,如果项目中有直接用到某个jar而这个jar已通过传递依赖的方式引入到maven项目里了。最好排除这个传递依赖在pom里面明确的声明这个依赖。归类依赖,不断的优化依赖如,去除多余的依赖。
参考技术A maven3在解决依赖冲突采用就近原则,在就近原则不能做出判断的情况下依据pom.xml的声明的先后顺序决定导入的jar。jar包冲突多为传递性依赖的管理不当给项目带来的麻烦解决思路罗列如下:
1、首先查看当前项目的jar关系如果使用eclipse、idea等编辑器可打开pom.xml文档底部有Dependency Hierarchy可供查看jar的依赖情况。第二种使用maven插件的方式使用命令行:
1
mvn dependency:tree
结果中重要的是两个部分,首先是Used undeclared dependencies意值项目中使用到的,但是没有显示声明的依赖。这种依赖意味着潜在的风险。他是通过其他直接依赖导入的传递性依赖,当直接依赖升级时相关依赖的版本也会变化。可能导致当前项目报错,且不易察觉。另一个部分是Unused declared dependencies意指项目中未使用的,但显式声明的依赖。需要注意的是我们不应该直接删除了事而是应该仔细分析。因为这个命令行发现不了执行测试和运行时需要的依赖。
以上方法都可可完整的查看当前项目的jar情况,个人更喜欢使用命令行。
2、通过以上方法我们可以看到项目中引用jar版本号;接下来就是如何排除掉我们不想要版本的jar;语法如下:
1
2
3
4
5
6
7
8
9
10
11
12
<dependency>
<groupId>.....</grooupId>
<artifactId>....</artifactId>
<version>...</version>
<exclusions>
<exclusion>
<groupId>.....</groupId>
<artifactId>.....</artifactId>
</exclusion>
</exclesions>
<dependency>
<!--exclusions可包含一个或多个exclusion元素-->
3、一下规避jar冲突的思路,如果项目中有直接用到某个jar而这个jar已通过传递依赖的方式引入到maven项目里了。最好排除这个传递依赖在pom里面明确的声明这个依赖。归类依赖,不断的优化依赖如,去除多余的依赖。
以上是关于Maven怎么处理引用的jar版本冲突的主要内容,如果未能解决你的问题,请参考以下文章