Maven的依赖体系
来源:互联网 发布:手机淘宝能删除好评吗? 编辑:程序博客网 时间:2024/06/08 06:00
一、直接依赖和间接依赖
mane最大的好处就是能够方便的声明第三方的jar包,只需要在pom中进行简单的声明就可以将此jar包依赖到项目中,那什么是直接依赖呢?就是在项目中直接声明的这些依赖:
间接依赖是由直接依赖间接依赖到项目的那些jar包,当项目依赖于某一第三方Jar包,而这一第三方Jar包又给我们间接性的带来了大量的依赖,这种间接性的依赖,不仅浪费了磁盘空间,而且也可能带来潜在的冲突,因此我们需要将这些不需要的依赖从项目中排除,对项目进行一个瘦身,这时我们需要对Pom进行优化,再或者,通过间接性依赖获得的Jar包版本过低,而这些低版本的Jar包无法满足我们项目的需求,这时我们也需要将这些低版本的Jar包排除掉:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.4.RELEASE</version></dependency>
<dependency> <groupId>net.sf.spring-json</groupId> <artifactId>spring-json</artifactId> <version>1.3.1</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>cglib</groupId> <artifactId>cglib-full</artifactId> </exclusion> </exclusions></dependency>
二、依赖规则
大家看到直接依赖和间接依赖之后可能会有疑问,由不同的直接依赖产生的同一jar包不同版本的jar包之间的间接依赖怎么进行排除?这就要讲到maven的规则:
(1)第一声明者优先(对于简介依赖)
例如:A项目依赖B、C两个项目,B和C又同时依赖D项目(依赖的D项目版本可能还是不同的),那就按照第一声明者优先的规则,谁先声明就用谁的。
(2)最后声明者优先(对于同一pom中直接依赖的同一jar包的不同版本间)
在pom中声明了同一jar包的不同版本,谁声明在后面就采用谁。
(3)最短路径优先(对于间接依赖)
从名称就可以看出对于间接依赖的jar包,谁的间接依赖的路径短就采用谁的,例如A依赖B,B依赖D,而A依赖C,C依赖E,E依赖F,F依赖D,采用最短的依赖A->B->D的依赖版本。
三、dependencyManagement与dependencies
Maven已经具备了面向对象的思想,面向对象的三要素就是多态、继承、封装,dependencies与dependencyManagement就涉及到的是继承的思想。
多模块项目中,各个模块一般均需要Junit测试Jar包,因此在父Pom配置文件中,我们可以将这个依赖写入:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency></dependencies>
此模块的各个子模块就可以直接继承此jar包了。
再想想,有一些依赖,是各个子模块所特有的,如果放在父模块的POM中进行定义,那么所有继承了该父模块的子模块均会存在该依赖,这样的结果是啥,项目中存在大量冗余Jar包,不但浪费了磁盘,而且也不利于管理,所以:
dependencyManagement> <!-- 配置项目依赖 --> <dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> </dependency> <dependency> <groupId>org.opensymphony.quartz</groupId> <artifactId>quartz-all</artifactId> <version>${quartz.version}</version> </dependency> <dependency> <groupId>oro</groupId> <artifactId>oro</artifactId> <version>${oro.version}</version> </dependency></dependencyManagement>
<!-- 配置项目依赖 --><dependencies> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency></dependencies>
可以省略版本,这样有利于控制版本,当然也可以自己定义在子模块中版本,这样将采用子模块中的版本。
1 0
- Maven的依赖体系
- Maven -- 依赖体系
- 【Maven】maven的依赖
- 【Maven】maven的依赖
- 【Maven】Maven的依赖范围
- Maven依赖的配置
- Maven的依赖管理
- Maven依赖的聚合
- Maven依赖的继承
- maven依赖的继承
- Maven的依赖。
- maven依赖的插件
- maven的依赖范围
- maven的依赖特性
- maven的依赖范围
- Maven的依赖范围
- maven的依赖范围
- maven的依赖范围
- jpa 及spring data jpa开发
- compareTo equals toString 起作用时机
- SQL Server 视图
- jpa嵌入式复合主键
- Android 常用的时间工具类
- Maven的依赖体系
- bean之间的相互拷贝
- 子页面用父页面js,jsp相对路径自加问题
- DECODE函数
- 随机森林对鸢尾花数据的两特征组合的分类结果
- Java 7中的TransferQueue
- 计算几何初步—【JSOI2015】投影面积
- 组装map的小技巧,之前的不需要的remove
- STM32F103VET6 2.4G通信模块NRF24L01 GPIO模拟SPI的测试例程