maven解决jar包冲突的三种方式

ε祈祈猫儿з 提交于 2020-03-02 10:57:56

maven的主要功能

我们都知道maven是一个项目管理工具,maven的两大主要功能是:

1、依赖管理:

maven对项目中jar包的管理过程。传统工程我们直接把jar包放置在项目中。
maven工程真正的jar包放置在仓库中,项目中只用放置jar包的坐标。

2、一键构建:

maven自身集成了Tomcat插件,可以对项目进行编译,测试,打包,安装和发布等操作。

仓库的种类:本地仓库,远程仓库【私服】,中央仓库
仓库之间的关系
当我们启动一个maven工程的时候,maven工程会通过pom文件中jar包的坐标去本地仓库找对应的jar包
默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库
在公司中,如果本地没有对应jar包,会先从私服下载jar包
如果私服中没有jar包,可以从中央仓库下载,也可以从本地上传。
maven常用命令:clean,compile,test,package,install,deploy。
maven三套生命周期:清理生命周期,默认生命周期,站点生命周期

解决jar包冲突的三种方式

maven工程要导入jar包的坐标,就必须要考虑解决jar包冲突
maven导入jar包中的一些概念
直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中去

解决jar包冲突的方式一

第一声明优先原则:哪个jar包的坐标在靠上的位置,这个jar包就是先声明的
先声明的jar包坐标下的依赖包,可以优先进入项目中

解决jar包冲突的方式二

路径近者优先原则:直接依赖路径比传递依赖路径近,那么最终项目进入的jar包会是路径近的直接依赖包

解决jar包冲突的方式三

直接排除法【推荐使用】:exclusions标签排除
当我们要排除某个jar包下依赖包(父类),在配置exclusions标签的时候,内部可以不写版本号,因为此时依赖包使用的版本和默认的本地jar包一样

maven工程的父子依赖关系

maven工程是可以分父子依赖关系的
凡是依赖别的项目后,拿到的别的项目的依赖包,都属于传递依赖
比如:当前A项目,被B项目依赖。那么我们A项目中所有jar包都会传递到B项目中
B项目开发者,如果再在B项目中导入一套SSM框架的jar包,对于B项目是直接依赖的
那么直接依赖的jar包就会把我们A项目传递过去的jar包覆盖掉
为了防止以上情况的出现,我们可以把A项目中主要jar包的坐标锁住,那么其他依赖该项目的项目中,即便是有同名的jar包直接依赖,也无法覆盖。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!