多模块开发
1.抽取entity模块
将先前的SSMProject01项目中的entity文件夹抽取出来,成为一个独立的模块
在SSMProject01项目中引入maven_03_entity
首先找到maven_03_entity的pom文件
直接引入SSMProject01
尝试编译(compile)SSMProject01项目报错,是因为没有在本地的maven库中引入maven_03_entity,进行引入(install)后,编译SSMProject01成功。
2.抽取dao模块
抽取SSMProject01项目里面的mapper文件夹,使其成为maven_04_mapper模块。
里面需要maven_03_entity实体类模块,还需要导入mysql的依赖
同时maven_04_mapper要导入SSMProject01
同样的,我们需要先install maven_04_mapper 到maven的本地仓库 才能 compile SSMProject01
总结
将抽取后的项目进行运行,测试之前的增删改查功能依然能够使用。 所以对于项目的拆分,大致会有如下几个步骤: (1) 创建Maven模块 (2) 书写模块代码 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分。拆 分方式可以按照功能拆也可以按照模块拆。 (3)通过maven指令安装模块到本地仓库(install 指令)
依赖管理
依赖的格式
验证依赖是具有传递性的
这里我们手动在SSMProject01项目的pom文件中把maven_03_entity的依赖给注释掉,然后重新编译
编译成功。
所以在分模块开发中,由于不够严谨,我们实际上可能引入了重复的依赖。这个我们称之为依赖冲突。
依赖冲突,冲突时maven会如何选择?
情况1:
情况2:
情况3:
********************
可选依赖和排除依赖
可选依赖:
对外隐藏当前所依赖的资源(不透明)
SSMProject01中只引入maven_04_mapper
maven_04_mapper 引入maven_03_entity
这样SSMProject01 是能正常运行的。
******************************************
现在在maven_04_mapper的pom中设置对maven_03_entity的引入为可选依赖
导致的结果:
maven_04_mapper 一切正常 (因为它是对外隐藏,自己还能用maven_03_entity)
SSMProject01 出现错误
这是因为 maven_04_mapper模块 对SSMProject01 隐藏了 对maven_03_entity的引入
排除依赖
排除依赖是指主动断开依赖的资源
重新回到最初的状态:
SSMProject01中只引入maven_04_mapper
maven_04_mapper 引入maven_03_entity
现在我们在SSMProject01的pom文件中 对maven_04_mapper 的引入中 排除对maven_03_entity的引入
<dependency>
<groupId>org.example</groupId>
<artifactId>maven_04_mapper</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<!-- 主动排除maven_03_entity-->
<exclusion>
<groupId>org.example</groupId>
<artifactId>maven_03_entity</artifactId>
</exclusion>
</exclusions>
</dependency>
这样同样会报错,因为找不到maven_03_entity里面的实体类
聚合和继承
聚合
注:我们的SSMProject01模块在这里作为maven_02_ssm(当然可以进一步拆分模块),这个01序号是留给maven_01_parent模块,我们聚合模块用的。下面的继承也是。
继承
注:实现继承和聚合可以是同一个模块,但是继承和聚合完全是两回事。
*******************************************
区分与总结
maven中的属性
配置文件中的属性
版本管理
多环境开发
跳过测试
私服
感觉和git一个作用啊???