Maven 进阶 --------- Maven 管理多模块应用


一、场景描述

commonModel :

提供公共的基础服务,比如工具类、常量类等等。

bussinessModel :

业务模块,是系统真正要实现的业务,依赖于 common 模块,比如订单管理、财务统计、会员管理等。

application :

可发布的 web 应用,由各个 bussinessModel 组成,最终满足项目整体需求。

第三方模块:

包括各类框架,Spring、MyBatis、日志等。整个应用都是依赖它们完成开发的。

在这里插入图片描述

二、如何使用 Maven 管理上述的结构

Maven 管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度统一。

1. 第一种实现方式

项目名称:maven-modules-project
完成功能:使用 IntelliJ IDEA 实现 Maven 管理多模块的应用开发

A、创建 Project 为 Empty Project

在这里插入图片描述

在这里插入图片描述
Project name:项目名称
Project location:项目存放位置

在这里插入图片描述
在这里插入图片描述

B、创建 Maven 的父工程

在这里插入图片描述
在这里插入图片描述
设置模块存放位置,和项目的GAV坐标

GroupId :公司域名的倒序
ArtifactId :项目或模块名称
Version :项目或模块版本号
在这里插入图片描述
父工程的 packaging 标签的文本内容必须设置为 pom。

在这里插入图片描述
父工程要求 src 目录必须删除掉。

在这里插入图片描述
C、创建子模块

模块名称 :maven-java,是 maven-parent 父工程的子模块

在这里插入图片描述

Parent:选择模块的父工程
GroupId:选择父工程后,默认继承父工程的 GroupId 值
ArtifactId:模块的项目名称
Version:选择父工程后,默认继承父工程的 Version 值

在这里插入图片描述
子模块项目的 pom 文件

在这里插入图片描述

parent 标签:指向父工程
relativePath 标签:相对路径

D、设置父工程编译级别

执行效果:

项目中会统一使用 JDK 版本和编译级别,所以项目的编译级别必须统一一致,那么将编译插件添加到父工程,子模块依然会无条件去继承父工程的插件。

指定编译级别前:

在 File —> Settings ----> Build、Execution、 Deployment —> Compiler —> Java Compiler 查看

在这里插入图片描述
在父工程的 build —> plugins 标签中添加编译插件

在这里插入图片描述

指定编译级别后,版本由 1.5 变成 1.8

E、父工程添加依赖

执行后效果:

在父工程 dependencies 标签中添加 MySQL 依赖,子模块会无条件继承父工程所有依赖。

添加 MySQL 依赖前:

在这里插入图片描述

添加 MySQL 依赖 (父工程 pom 文件)

在这里插入图片描述

添加 MySQL 依赖后
在这里插入图片描述

F、父工程管理依赖版本号

以上写做法,子模块会无条件继承父工程的所有依赖,导致的问题是,本不需要的继承的依赖也会被继承,这就大大增加了项目模块最终打包的大小,也可能未上线埋下了隐患。

也就是说,父工程管理的是所有项目模块的依赖,而不是某一个项目模块的依赖,所以某一个项目模块不需要继承父工程中的所有依赖,这就需要子项目模块向父工程声明需要的、依赖即可(声明式依赖)。而此时,父工程实际只需要管理依赖的版本号即可。

实现方式如下:

父工程添加 dependencyManagement 前

在这里插入图片描述父工程添加 dependencyManagement 标签管理依赖

在这里插入图片描述
父工程添加 dependencyManagement 后

子模块项目之前继承的依赖消失,由于父工程通过 dependencyManagement 标签管理依赖,那么之前子模块无条件继承的依赖就全部消失。

在这里插入图片描述
父工程添加 properties 管理版本号

在 properties 标签中,可以自定义标签名称来管理依赖的版本号,通常自定义的标签名称由 “项目名称” + version 英文单词构成。被管理的依赖版本号由 “${算定标签名称}” 来代替。

在这里插入图片描述
子模块声明式添加依赖

由于父工程管理依赖的版本号,那么子模块要想继承依赖,只能通过声明式来添加依赖。实际上,子模块中的依赖是继承父工程依赖的版本号,如果子模块已定义依赖版本号,那么以子模块定义的版本号为准。

在这里插入图片描述
在这里插入图片描述

2. 第二种实现方式

子模块处于父模块中
在这里插入图片描述
在父工程的 dependencies 标签里添加 MySQL 依赖,子模块会无条件继承父工程所有依赖。

管理版本号的方式同上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值