依赖管理
依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
如何在被其他调用的时候,隐藏一些依赖呢?(隐藏依赖就等于关闭掉传递依赖,使得引用这个模块的模块不能使用某个依赖)
例如将day6dao的模块中,隐藏调用pojo模块,刷新工程会出现什么效果:
<dependency>
<groupId>com.wst</groupId>
<artifactId>Springmvc_08_pojo</artifactId>
<version>1.0.0</version>
<optional>true</optional>
</dependency>
为刷新是依赖展示:
刷新后依赖展示,在ssm模块下的dao模块依赖中的pojo就消失了:
dao模块下的pojo仍然存在:
在ssm模块中传递依赖消失则会报错。
如果在调用一些模块的时候,不想调用该模块下的某些依赖(某些依赖会跟自己主模块的依赖相互冲突),则需要在主模块调用该模块的时候,就要在调用模块的坐标下排除依赖:
例如想要ssm模块调用dao模块的时候,排除mybatis依赖,则要在smm的pom文件调用dao模块的时候,下面增加排除函数依赖
<dependency>
<groupId>com.wst</groupId>
<artifactId>Spring_08_dao</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
这样就能够在调用dao模块的时候,排除掉dao模块中的mybatis依赖。
运行后 在smm模块的dao模块依赖中mybatis就消失了:
继承与聚合
聚合
- 聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合
- 聚合工程: 通常是一个不具有业务功能的“空”工程(有且仅有一个pom文件)
- 作用:使用聚合工程可以将多个工程编组,通过对聚合工程进行构建,实现对所包含的模块进行同步构建
- 当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题
我们来创建一个工程来管理其他三个工程:
创建一个Spring_08_parent工程,将里面的pom文件中打包方式该为pom,并且使用modules来选择管理要管理的三个工程:
<?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>com.wst</groupId>
<artifactId>Spring_08_parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<!-- 设置管理的模块名称-->
<modules>
<module>../Spring_08_dao</module>
<module>../Springmvc_08_pojo</module>
<module>../Springmvc_08_ssm</module>
</modules>
</project>
在管理完成后,在maven中compile一下,查看结果如图所示(显示的则是三个过程包括自己运行成功):
构建的顺序按照依赖调用来,最先依赖的会在第一个。
继承
- 概念:继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承夫工程中的配置信息,常见于依赖关系的继承。
作用:
- 简化配置
- 减少版本冲突
我们将在主工程Spring_08_parent里面添加项目所需要的依赖,将子工程里的依赖移除,并在子工程pom文件里使用parent 带上父工程里的坐标来继承父工程里面的依赖:
<parent>
<groupId>com.wst</groupId>
<artifactId>Spring_08_parent</artifactId>
<version>1.0.0</version>
<relativePath>../Spring_08_parent/pom.xml</relativePath>
</parent>
这样就能将父工程里的依赖加载进来,并且在父工程里修改依赖,子工程里的依赖也会随之修改,这样就做到了依赖的统一。
如果有些依赖是某些工程特有的(其他工程不需要),那我们可以设置依赖管理,这样在依赖管理里面的依赖,就可以在子工程里让子工程自己去调用,效果也跟上述类似,父工程里的依赖管理中依赖改变,子工程也会相应的改变:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
这样在子工程再次调用(注意不要写版本号,这样就能默认继承父工程的依赖管理中的依赖,且会随着父工程里的依赖改变而改变):
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
聚合与继承的区别
作用
- 聚合用于快速构建项目
- 继承用于快速配置
相同点:
- 聚合与继承的pom.xm1文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
- 聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己