maven常用知识详解3:聚合与继承

本文详细介绍maven常用知识:聚合与继承。接上一篇,maven常用知识详解2:仓库

聚合与继承

 聚合

一次需要构建多个项目,可以使用聚合

java 复制代码
<project>
	......
	<packaging>pom</packaging>
	<modules>
		<module>account-email</module>
		<module>account-persist</module>
	</modules>
</project>
	注:对于聚合模块来说,打包方式packaging的属性值必须为pom,否则无法构建

 继承

创建POM的父子结构,然后在父POM中声明一些配置供子POM继承,实现"一处声明、多处使用"的目的。

*父模块POM文件:

java 复制代码
<project>
	......
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.juvenxu.mvnbook.account</groupId>
	<artifactId>account-parent</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>Account Parent</name>
</project>

注:作为父模块的POM,其打包类型packaging也必须为pom。由于父模块只是为了帮助消除配置的重复,因此除了pom文件外也就不需要别的文件夹了。

*子模块的POM文件:

java 复制代码
<project>
	......
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.mvnbook.account</groupId>
		<artifactId>account-parent</artifactId>
		<version>1.0.0-SNAPSHOT</version>
		<relativePath>../account-parent/pom.xml</relativePath>
	</parent>

	<artifactId>account-email</artifactId>
	<name>Account email</name>

	<dependencies>
		......
	</dependencies>
</project>

:使用parent元素声明父模块,parent下的三个元素groupId、artifactId、version指定了父模块的坐标,relativePath表示父模块pom的相对路径。

可被继承的POM元素:

groupId:项目组ID;

version:项目版本;

description:项目描述信息;

url:项目URL地址.

dependencies:项目的依赖配置.等......

 依赖管理

(推荐使用dependencyManagement,不是所有子项目都需要所有依赖)

dependencyManagement元素既能让子模块继承到父模块的依赖配置,又能保证子模块依赖使用的灵活性。在dependencyManagement元素下的依赖声明不会引入实际的依赖,但它能够约束dependencies下的依赖使用。

如果子模块不声明依赖的使用,即使该依赖已经在父POM的dependencyManagement中声名,也不会产生任何实际效果。

聚合模块和其他模块的目录结构并非一定是父子关系,也可以是平行目录。如果使用平行目录,聚合模块的POM需要指向正确的模块目录。

 插件管理

pluginManagement元素帮助Maven管理插件,该元素中配置的依赖不会造成实际的插件调用行为,当子模块配置时才会产生行为。当项目中多个模块有同样的插件配置时,应当将配置移到父POM中,子模块在使用时可以不配置版本信息,这样可以统一项目插件版本,避免潜在的插件不一致问题,更易于维护。

 聚合与继承的关系

对于聚合模块来说,他知道有哪些模块被聚合,但被聚合模块不知道聚合模块的存在。

对于继承关系的父POM来说,他不知道哪些子模块继承他,但子模块必须知道父POM。

共同点:聚合POM与继承关系的父POM的packaging都必须是pom。

☆点击精彩内容,了解更多。

相关推荐
举一个梨子zz19 分钟前
Java—— 可变参数、集合工具类、集合嵌套、不可变集合
java·开发语言·intellij-idea·需求分析
算法给的安全感20 分钟前
bfs-最小步数问题
java·算法·宽度优先
jstart千语36 分钟前
【消息队列】RabbitMQ基本认识
java·服务器·分布式·rabbitmq
泽020237 分钟前
C++类和对象之相关特性
java·开发语言·c++
唐僧洗头爱飘柔952740 分钟前
【SSM-SpringMVC(二)】Spring接入Web环境!本篇开始研究SpringMVC的使用!SpringMVC数据响应和获取请求数据
java·spring·文件上传·页面跳转·数据响应·获取请求数据·静态资源访问
-曾牛43 分钟前
Spring AI 集成 Mistral AI:构建高效多语言对话助手的实战指南
java·人工智能·后端·spring·microsoft·spring ai
在未来等你1 小时前
互联网大厂Java求职面试:电商商品推荐系统中的AI技术应用
java·缓存·kafka·推荐系统·向量数据库·jvm调优·spring ai
@ chen2 小时前
常见排序算法及其java实现
java·算法·排序算法
带刺的坐椅2 小时前
SpringBoot2 可以使用 SolonMCP 开发 MCP(江湖救急)
java·spring·ai·solon·mcp
shengjk12 小时前
序列化和反序列化:从理论到实践的全方位指南
java·大数据·开发语言·人工智能·后端·ai编程