前端之家收集整理的这篇文章主要介绍了
八.mavne依赖特性,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1.依赖范围:<scope>依赖范围</scope>
1.test:测试范围,编译和打包都不会引入依赖
2.compile:编译范围,编译和打包都会加入依赖
3.provided:编译和测试时的范围,打包时不会加入依赖,如:servlet-api,因为tomcao自带的有,打包时加入会冲突
4.runtime:运行时范围,编译和打包时不加入依赖,如:数据库驱动
5.system: Maven直接从本地文件系统解析构件(从本地文件系统找依赖)
6.systemPath: 仅用于范围为system。提供相应的路径
7.optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
8.缺省默认为compile
2.依赖传递:
1.当某个项目引入了别的项目,别的项目所需要的jar等都会自动引入这个项目,(只会传递compile范围的依赖,test范围的依赖不会传递)
2.A被B依赖,B被C依赖,A的依赖会传递给C,可以使用依赖排除去掉依赖
3.依赖选择:
1.依赖级别相同:当A项目和B项目依赖了两个不同版本的jar,C同时依赖了A和B,那么C接受依赖传递的jar的版本为pom.xml
先引入依赖的项目的jar的版本
2.依赖级别不同:当A项目和B项目依赖了两个不同版本的jar,那么C接受依赖传递的jar的版本为pom.xml(最短路径选择)
依赖的项目的jar的顶级依赖jar的顺序选择
3.另一篇博文的借鉴:
a.最短路径原则:如果A对于依赖路径中有两个相同的jar包,那么选择路径短的那个包,路径最近者优先,上述会选X(2.0)。
b.第一声明优先原则:如果A对于依赖路径中有两个相同的jar包,路径长度也相同,那么依赖写在前面的优先。例如:A->B->F(1.0),A->C->F(2.0),会选F(1.0)。
c.可选依赖不会被传递,如A->B,B->C,B->D,A对B直接依赖,B对C和D是可选依赖,那么在A中不会引入C和D。可选依赖通过optional元素配置,true表示可选。如果要在A项目中使用C或者D则需要显式地声明C或者D依赖。
4.依赖排除:当B项目依赖A项目但不想接受A项目的某个jar包的传递,可以使用依赖排除
在pom.xml中添加:
<dependency>
<groupId>mymaven</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SANPSHOP</version>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</dependency>