一、使用多模块的背景
在创建一个工程时,往往需要多个模块进行协调
- commonModel:提供公共的基础服务,比如工具类、常量类等等;
- bussinessModel:业务模块,是系统真正要实现的业务,依赖于 common 模块,比如订单管理、财务统计、会员管理等;
- application:可发布的 web 应用,由各个 bussinessModel 组成,最终满足项目整体需求;
- 第三方模块:包括各类框架,Spring、MyBatis、日志等。整个应用都是依赖它们完成完成。
- Maven 管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度统一。
- 版本需要统一等重要问题
二、使用Maven进行管理的方式一
2.1 创建父工程
- Maven父工程有如下两个要求:
- packaging标签的文本内容必须设置为pom
- 要求 src 目录必须删除掉
- maven多模块管理就是让它的子模块的pom文件来继承父工程中的pom文件
2.2 创建子模块
- Add as module to:选择将创建的模块添加哪个模块
- Parent:选择模块的父工程
- GroupId:选择父工程后,默认继承父工程的 GroupId 值
- ArtifactId:模块的项目名称
- Version:选择父工程后,默认继承父工程的 Version 值
- web-app项目也是如此创建,只不过使用的模板不同
2.3 创建父子工程注意事项
子工程也是可以设置为父工程的
- 将packing标签改为pom
- 将src目录进行删除
如果创建工程忘记设置父工程,如何后期指定?
- 可以使用parent标签,并指定GAV坐标以及相对的路径即可
2.4 子模块继承父工程所有依赖
如果父工程中添加了依赖之后,子工程会无条件进行继承
2.5 声明式集成父工程的依赖
- 上面的依赖存在一种弊端,如果我们只是进行继承,会导致铺张浪费,很多工程不需要使用的依赖,会统统打包。
- 此时迫切需要一个加强依赖,
dependencyManagement
标签 - 此时我们的子工程需要进行声明式的继承,需要什么就声明什么,不需要写版本号
- 如果子工程自定义版本号,那么会覆盖父类的版本号
- 父工程的版本号如果进行修改,子工程的版本号也会进行修改
2.6 父工程版本控制全面升级
- 因为想要控制版本号,比较麻烦,可以自定义标签
- 一般使用项目名称+version,如下图
- 再用el表达式进行获取
三、使用Maven进行管理的方式二
3.1 创建父工程
- 注意删除src目录
- packing标签改为pom
3.2 创建子工程
该创建方式,主要是不将子模块拿出父工程里面
- 注意观察文件文件位置即标签
- 父工程中多了一个model标签
- web-app工程也是如此
3.3 注意事项
子工程也是可以设置为父工程的
- 将packing标签改为pom
- 将src目录进行删除
3.4 父工程管理版本号
- 同第一种方式类似
- 可以进行版本控制
- 可以进行加强管理
- 子工程必须声明式依赖
四、编译插件
常在父工程中加入编译插件,用于所有项目在同一个环境中编译
<build>
<plugins>
<!--JDK1.8编译插件-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
五、使用Maven进行管理的方式三
- 该方式就是将方式一和方式二进行混合。如下