一、 Maven的依赖传递
在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。 假设A依赖B,B依赖C,那么我们可以根据maven项目依赖的特征不难推出项目A也依赖C。
网络异常,图片无法展示
|
网络异常,图片无法展示
|
- 优点:减少坐标的编写
- 缺点:可能会造成版本冲突
二、如何解决依赖冲突
网络异常,图片无法展示
|
网络异常,图片无法展示
|
2.1 依赖调节原则
① 第一声明优先原则
- 在 pom 文件中定义依赖(坐标),谁先声明就用谁
网络异常,图片无法展示
|
② 路径近者优先原则
- 在pom 文件中定义依赖(坐标),谁的路径近就用谁
网络异常,图片无法展示
|
2.2 排除依赖
- 通过在pom文件,通过exclusions标签排不需要的依赖jar包
网络异常,图片无法展示
|
2.3 版本锁定
在pom文件中,直接指定项目依赖的所有版本号,导入依赖的时候就不需要指定版本
- properties中定义所有的公共版本号常量
- 通过dependencyManagement锁定版本号:不会导入依赖jar包
- dependencies导入依赖:不需要指定版本号
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.csjava</groupId> <artifactId>maven-helloworld</artifactId> <version>1.0-SNAPSHOT</version> <!-- 集中声明和管理项目依赖的jar版本信息 --> <properties> <spring.version>5.1.5.RELEASE</spring.version> <junit.version>4.13</junit.version> </properties> <!--介绍和演示maven解决jar冲突之:版本锁定 架构师、技术经理 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies> </dependencyManagement> <!--jar依赖操作 程序猿 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> </dependencies> </project>
三、Maven分模块构建
3.1 什么是分模块构建
在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大,所以汽车厂商都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。
网络异常,图片无法展示
|
常见的拆分方式有两种:
- 按照业务模块进行拆分,例如将一个项目分为用户模块、订单模块、购物车模块等,每个模块对应就是一个maven工程
- 按照层进行拆分,例如持久层、业务层、表现层等,每个层对应就是一个maven工程不管是上面哪种拆分方式,通常都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一管理和配置。
网络异常,图片无法展示|
3.2 maven工程继承
在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非private的属性和方法。
同样,在maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。
① 创建父工程
网络异常,图片无法展示
|
<!--父工程引入坐标--> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> </dependencies>
② 创建子(工程)模块
网络异常,图片无法展示
|
3.3 maven工程聚合
在maven工程的pom.xml文件中可以使用 标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作。
网络异常,图片无法展示
|
注意:继承和聚合本质上没啥关系,通常情况下父工程会聚合管理的子模块(工程)
3.4 创建子模块方式
网络异常,图片无法展示
|
网络异常,图片无法展示
|