- 项目关系
上面讲依赖是入门,下面讲依赖是深入了解,除了了解依赖还有继承和聚合。
1.Maven的依赖
1.1 添加依赖
在Maven中需要使用在dependencies中定义一个或者多个dependency元素,来声明项目的一个或者多个依赖。
每个依赖元素dependency包括:
例如:为项目添加junit测试的jar包,可以按如下方式定义
<project xmlns = " http://maven.apache.org/POM/4.0.0 " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " xsi:schemaLocation = " http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd " > <modelVersion>4.0.0</modelVersion> <groupId>com.fz</groupId> <artifactId>ShiroTest</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>ShiroTest Maven Webapp</name> <url> http://maven.apache.org </url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!--不声明依赖范围scope,默认是compile--> <scope>test</scope> </dependency> </dependencies> </project> |
1.2 依赖范围(sope)
<dependency> <!-- compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去 test:测试依赖范围,它在编译和打包的时候都不会把该依赖打包进去 provided:在编译和测试范围有效,最后生成war包时不会打包进去。 runtime:运行时依赖,编译的时候不依赖。 system:系统依赖范围 import:导入依赖范围 --> <scope></scope> </dependency>
|
依赖范围与classpath的关系
1.3 依赖的传递性
在Maven中一个依赖不仅仅是一个JAR。它是一个POM文件,这个POM可能也声明了对其它构件的依赖。这些依赖的依赖叫做传递性依赖
所谓传递性依赖就是: 如果项目A依赖于项目B,项目B自身依赖于项目C,那么项目A它也依赖于项目C的依赖。
这种依赖是基于compile这个范围进行依赖
哪个依赖的顺序在前面就依赖哪个
如果路径的长短不一致,就选择最小路径
user-dao中的log4j路径:user-dao=====>user-core=====>log4j1.2.17
user-log中的log4j路径:user-log=====>log4j1.2.16
可见user-log的log4j路径要短一些,所以这里是1.2.16
假如我不想依赖user-core和user-log两个模块中的log4j呢?
那就自己再添加一个dependency试试。
可以看出Maven会优先依赖自己定义的那个dependeny
1.2.2 通过exclusions元素排除不想要的传递性依赖
以上的问题可以通过更改相应的顺序来确定依赖的版本,当然也可以使用依赖的排除功能。来精确的控制所使用的版本。
排除依赖:就是将该模块中的**jar包给移除掉。
例如:以下的情况肯定是使用了user-log的log4j版本,因为它的顺序在前面。假如现在不想通过调整顺序来改版本那就可以使用排除依赖。
排除依赖是在dependency元素下的exclusions元素,例如:我们把user-log中的log4j排除掉,那就只能去user-core中找log4j了
可以看出虽然user-log写在了上面,但是通过exclusion还是会把该模块中的log4j给排除掉。
1.4 依赖版本的界限
在依赖某个项目的时候,你可以不必指定特定的某个版本。也可以指定一个版本范围
(,) 不包含
[,] 包含
例如:依赖一个Junit的大于等于3.8 但是小于4.0 的版本
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>[3.8,4.0)</version> </dependency> |
修改pom.xml
2.继承
父项目类型:pom
父项目mvn-03——pom.xml
子项目mvn-04——pom.xml
假设我们要升级版本,只需升级父项目的版本即可。
3.聚合
高内聚、低耦合
创建聚合父项目-类型为pom
创建子模块
查看物理磁盘,发现不在外面,而在一个项目里面,eclipse却是单独一个项目存在。