Maven高级
一、分模块开发与设计
在一个SSM项目中,我们常见的模块有controler层、dao层、domain层、service层等等
但是也许不是每一层都是由固定一个人开发的,那么就需要用到maven来管理这些分开的模块
1、实现流程
当每一个模块开发好之后,我们需要使用maven的install指令,将其安装到本地仓库中
然后在需要引用该模块的模块的pom.xml文件中引入坐标
上图是一个模块开发候的坐标,也是引用的坐标
注意:
- 一定要先install安装到本地仓库。否则就算没有出错,到时候也不能用maven编译,会报错
- 每个模块只需要保留该模块需要的配置文件或者相关的类文件即可,不需要保留无用的文件
- 不同模块间的配置文件名称不可相同,因此命名配置文件的时候需要安装模块命名,可以有效避免重名
- 就ssm而言,修改配置文件web.xml配置文件加载spring环境的文件名称时,可以使用*统配,加载所有的applicationContext配置文件
二、聚合
为了避免多模块开发完成后,这当中某个模块进行了升级,然后导致其他模块的某些地方也要进行升级,我们就可以额外使用一个模块来同时管理开发完成的模块,使得当当中一个模块升级后,其他也要重新编译升级,这就叫聚合
也就是说聚合就是通过一个模块管理其他某些模块的构建,同时执行生命周期执行
1、实现流程
- 新建一个模块(这个模块不需要用src)
- 定义该工程用于构建管理
- 声明管理工程列表
注意:参与聚合操作的模块最终执行顺序与模块间的依赖有关,与配置顺序无关
三、继承
继承主要用于模块依赖关系的维护
可以防止每个模块开发的时候,使用某个依赖版本号不同,导致程序出现错误,因此可以额外添加一个模块,在这模块中声明使用的依赖的版本,后续子模块只需要声明依赖即可,不需要声明版本
1、实现流程
-
声明此处进行依赖管理(使用dependencyManagement标签)
-
在子工程声明父工程(因为子工程的groupId和版本号需和父工程保持一致,因此子工程不再需要声明这两个)
-
在父工程声明好的依赖版本,子工程不需要再声明
四、继承与聚合
- 作用
- 相同点
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
- 聚合与继承均属于设计模块,并无实际模块内容
- 不同点
- 聚合是当前模块中配置关系,聚合可以感知参与聚合的模块有哪些
- 继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
五、属性
pom文件通常会有很多依赖,当我们需要修改其中一个依赖的版本的时候,有些时候其他版本也需要修改,因此为了统一管理,防止修改的时候漏了某一个忘记修改,我们可以像JAVA一样自定义一个属性,当我们修改属性的值的时候,版本号也随之修改
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
除此之外,如果在其他模块的版本号需要和管理模块的版本号一样
则可能使用${version}来替换
六、版本管理
- SNAPSHOT(快照版)
- 项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
- 快照版本会随着开发的进展不断更新 RELEASE(发布版本)
- RELEASE(发布版本)
- 项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
七、资源管理
Maven除了能管理自身的pom文件的一些版本号,还可以管理其他文件的一些属性
1、实现流程
-
自定义属性(这里以jdbc的url为例)
-
配置资源文件对应的信息(filtering为开启对配置文件资源的加载过滤)
-
相对应的jdbc配置文件替换成el表达式
注意:
- 如果有多个模块需要修改jdbc配置文件,可以将上述的ssm_dao修改为${prohect.basedir},则当前目录下所有模块都可以配置成功
八、多环境开发配置
在我们生成一个模块的时候,在开发环境是一个配置,在服务器又是另外一个配置,那么就要适应多种环境
1、实现流程
- 创建多环境
- 定义具体环境
- 定义具体环境的唯一值
- 定义环境中的专用属性值
注意:
<activation>
<activeByDefault>true</activeByDefault>
</activation>
如果没有设置默认环境,则使用不同环境的时候,用maven打包或者安装的时候使用不同参数(环境 ID)来代表不同的生成环境
|