Maven学习(Maven项目模块化。模块间“继承“机制。父(工程),子项目(模块)间聚合)

目录

一、Maven项目模块化?

(1)基本介绍。

(2)汽车模块化生产再聚合组装。

(3)Maven项目模块化图解。

1、maven_parent。

2、maven_pojo。

3、maven_dao。

4、maven_service。

5、maven_web。

6、所有的依赖关系与继承关系。

二、Maven项目的继承。

(1)Java语言的继承关系。

(2)Maven工程(项目)间的继承。

(3)Maven工程(项目)间如何使用"继承"机制。

1、操作位置。

2、使用的核心标签。

3、核心注意事项。

(4)IDEA中简单演示Maven项目间继承关系。

三、Maven项目的聚合。

(1)什么是Maven项目的聚合?

(2)为啥需要Maven项目的聚合?

(3)使用Maven的项目(工程)间的聚合。


  • 本篇博客的内容是涉及Maven的高级特性。
  • Maven的高级特性(模块化、聚合、依赖管理)。本篇博客的主要内容是偏向于Maven项目(工程)模块化与Maven项目(工程)间的继承机制和聚合

一、Maven项目模块化?

(1)基本介绍。
  • Maven项目模块化是指将一个大型项目拆分成多个模块(Module)
  • 每个模块负责一部分功能。这样可以提高项目的可维护性可扩展性可重用性

(2)汽车模块化生产再聚合组装。
  • 在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大。
  • 所以车场都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。大致过程如下图所示。


(3)Maven项目模块化图解。
  • 下图展示了一个Maven项目的模块化结构,其中包含一个父工程和四个子模块项目。
  • 这种模块化结构有助于项目的组织和管理。使得各个模块可以独立开发和测试,同时持一致的构建和依赖管理


1、maven_parent。
  • 这是项目的父工程(项目),通常是一个聚合项目
  • pom.xml文件中定义了所有子模块的公共依赖、插件和构建配置
  • 父项目负责管理子模块之间的依赖关系和版本控制

2、maven_pojo。
  • 这是一个子模块,pojo(实体类层)。通常用于定义项目中的所有所需的实体类
  • 这个模块可能不包含业务逻辑。而是作为数据模型层,供其他模块使用。
  • 它继承自父项目(maven_parent)。意味着它将使用父项目中定义的依赖和插件。

3、maven_dao。
  • 这个子模块通常用于数据访问对象层(dao/mapper)负责与数据库数据进行交互
  • 它依赖maven_pojo模块,因为dao层需要使用pojo(实体类层)来表示数据库中的数据。
  • 同样,它也继承自父项目(maven_parent)

4、maven_service。
  • 这个子模块包含业务逻辑层(service)负责处理应用程序的核心业务逻辑
  • 它依赖于maven_dao模块,因为业务逻辑层需要通过DAO层与数据库交互。
  • 它也继承自父项目(maven_parent)。

5、maven_web。
  • 这个子模块通常用于Web层。包含Web应用程序的前端和后端控制器。
  • 它依赖于maven_service模块,因为Web层需要调用业务逻辑层来处理请求
  • 它同样继承自父项目(maven_parent)。

6、所有的依赖关系与继承关系。
  • maven_pojo模块被maven_dao和maven_service模块依赖,因为它提供数据实体模型。
  • maven_dao模块被maven_service模块依赖,因为它提供了数据访问的功能。
  • maven_service模块被maven_web模块依赖,因为它提供了业务逻辑处理的功能。
  • 所有子模块都继承自maven_parent。这表示它们共享父项目的配置(如:版本号、依赖管理、插件等等)。

二、Maven项目的继承。

(1)Java语言的继承关系。
  • 在Java语言中,类之间是可以继承的。
  • 通过继承,子类就可以直接引用父类中非private的属性和方法。也可以拥有自己的属性与方法。

(2)Maven工程(项目)间的继承。
  • 同样,在Maven项目中,继承是一种机制。允许子模块(子项目)继承父模块(父项目)的配置。就可以使用在父工程(项目)中引入的依赖。
  • 这种机制在多模块项目中非常有用。因为它可以减少重复配置,确保所有模块共享相同的构建配置和依赖管理

(3)Maven工程(项目)间如何使用"继承"机制。
1、操作位置。
  • 主要是在核心配置文件pom.xml文件中进行操作。

2、使用的核心标签。
  • <parent>。(表示:指定本子项目的父项目)
  • <packing>。(表示:指定打包方式:pom。表示本Maven工程是父工程)
  • <modules>。(表示:父工程(项目)与其他子工程(项目)间的聚合
3、核心注意事项。
  • 父工程(项目)与子工程(项目)。


  • 依赖管理。


(4)IDEA中简单演示Maven项目间继承关系。
  • 首先先创建一个父项目(工程)。


  • 再创建几个子项目。注意是在该父项目(工程)的目录下进行新建!


  • 这里举例创建dao(数据访问层)、service(服务层)、pojo(实体层)、webServlet(请求响应层)的各个子项目。
  • dao子项目的创建。


  • service子项目的创建。


  • pojo子项目的创建。


  • webServlet子项目的创建。


  • 删除父工程(项目)的无用目录。


  • 操作完后。当前父项目(工程)的pom.xml文件。
  • 被继承的Maven工程通常称为父工程,父工程的打包方式必须为pom。所以我们区分基个Maven工程是否为父工程就看这个工程的打包方式是否为pom!


  • 每一个子项目的pom.xml文件。
  • 继承其他Maven父工程(项目)的工程通常称为子工程(项目)。在pom.xml文件中通过<parent>标签进行父工程(项目)的继承




三、Maven项目的聚合。

(1)什么是Maven项目的聚合?
  • 在Maven中,聚合是一个项目,它允许你执行构建生命周期阶段,如编译、测试或打包,跨越多个模块。
  • 聚合项目通常用于管理多模块项目。其中每个模块可以独立构建但整个项目作为一个整体进行部署和发布

  • 在Maven工程的pom.xml文件中可以使用<modules>标签将其他maven工程聚合到一起。聚合的目的是为了进行统一操作。



(2)为啥需要Maven项目的聚合?
  • 拆分后的maven工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来非常繁琐。这时就可以使用<modules>标签将这些工程统一聚合到一起。

  • maven工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程就都会被打包了。


(3)使用Maven的项目(工程)间的聚合。
  • 直接使用上面继承的例子。

  • 父工程(项目)ParentWeb。其子项目:pojo项目、dao项目、service项目、webServlet项目。
  • 如下是父项目的pom.xml文件。核心使用标签<packaging>(打包)、<modules>(聚合)。


  • dao子项目依赖pojo子项目、service子项目依赖dao子项目、webServlet子项目依赖service子项目。
  • 如下是各子项目的pom.xml文件。核心使用标签<parent>(父工程)、<modules>(子模块间的聚合或依赖)。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936562.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ERC论文阅读(03)--instructERC论文阅读笔记(2024-12-14)

instructERC论文阅读笔记 2024-12-14 论文题目&#xff1a;InstructERC: Reforming Emotion Recognition in Conversation with Multi-task Retrieval-Augmented Large Language Models 说明&#xff1a;以下内容纯属本人看论文及复现代码的记录&#xff0c;如想了解论文细节&…

《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分&#xff0c;如按钮&#xff0c;复选框&#xff0c;文本框或复杂的树控件&#xff0c;每个组件都有三个特征&#xff1a; 内容&#xff0c;如按钮的状态&#xff0c;文本域中的文本。外观&#xff0c;颜色&#xff0c…

ubuntu20.04+ROS Noetic 安装PX4+Mavros

文章目录 系统环境安装依赖PX4 安装老版本安装测试环境变量添加版本查看 安装MAVROS&#xff08;二进制安装非源码安装&#xff09;测试 OGC 地面站安装测试mavros与sitl通信参考 系统环境 ubuntu 20.04 ROS Noetic 如果系统安装了Anaconda等虚拟环境管理器&#xff0c;要退出…

IIS服务器部署C# WebApi程序,客户端PUT,DELETE请求无法执行

这两天在自己Windows10电脑上搭建IIS服务器&#xff0c;把自己写的WebApi代码部署上做个本地服务器&#xff0c;结果客户端的PUT和DELETE请求无法执行&#xff0c;GET、POST这些都正常&#xff0c;研究后发现要删除IIS中的“模块”中的"webdavmodule"才能解决。

基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现

摘要 在旅游需求日益增长的今天&#xff0c;一个全面、便捷的旅游信息服务平台显得尤为重要。嗨玩旅游网站正是为了满足这一需求而设计的在线平台&#xff0c;它提供了包括景点信息、旅游线路、商品信息、社区信息和活动推广等在内的丰富旅游目的地信息&#xff0c;旨在帮助用…

HDR视频技术之七:逆色调映射

HDR 技术近年来发展迅猛&#xff0c;在未来将会成为图像与视频领域的主流。当前 HDR 内容非常短缺&#xff0c;限制了 HDR 视听节目的广泛应用。逆色调映射(Inverse Tone Mapping)应运而生&#xff0c;它是一种用来将 SDR 源信号转换为 HDR 源信号的技术&#xff0c;可以应用于…

EXCEL的各种图形,统计图形

目录 0 EXCEL的各种图形&#xff0c;统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图&#xff0c;一般是只选中1列数据&#xff08;1个数组&#xff09; 1.3 如何修改频度图的宽度 1.4 hist图的一个特…

AI 智能名片 S2B2C 商城小程序在社群团购运营中的作用与价值

摘要&#xff1a;本文深入探讨了 AI 智能名片 S2B2C 商城小程序在社群团购运营中的重要作用。随着社群团购的兴起&#xff0c;如何有效运营成为关键问题。AI 智能名片 S2B2C 商城小程序凭借其独特功能&#xff0c;能够在促进消费者互动、提升产品传播效果、影响购买决策以及实现…

【0x000A】HCI_Reject_Connection_Request命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Reject_Connection_Request命令格式 2.2. 参数说明 2.2.1. BD_ADDR&#xff08;蓝牙设备地址&#xff09; 2.2.2. Reason&#xff08;拒绝原因&#xff09; 三、返回事件及参数说明 3.1. 返回参数 3.2. 生成的事件…

Ant Design of Vue之带select控件,单元格编辑功能的表格EditableCell组件

效果图 功能 表格里面某一行或者某一个单元格支持select复选框可以编辑&#xff0c;新增一行数据&#xff0c;删除一行数据&#xff0c;并且有校验规则 源码 editablecell组件源码 参考自 源码

git企业的使用详细命令行操作

git是Linux创始人通过内核开发而创作的分布式版本的控制系统&#xff0c;而我们作为开发者需要开发与维护&#xff0c;避免不了版本的迭代和更新&#xff0c;git就是用来保存修改删除等操作的工具&#xff0c;可以记录代码改动情况&#xff0c;它能够保存代码的每个版本&#x…

景联文科技提供高质量文本标注服务,驱动AI技术发展

文本标注是指在原始文本数据上添加标签的过程&#xff0c;这些标签可以用来指示特定的实体、关系、事件等信息&#xff0c;以帮助计算机理解和处理这些数据。 文本标注是自然语言处理&#xff08;NLP&#xff09;领域的一个重要环节&#xff0c;它通过为文本的不同部分提供具体…

基于nginx和ffmpeg搭建HTTP FLV流媒体服务器

一、简介 整体是使用nginx搭建HTTP FLV流媒体服务器&#xff1a; 流程&#xff1a;音视频->rtmp->http-flv 音视频转为rtmp需要借助ffmpeg转化。 rtmp转为http-flv需要借助nginx转化。 nginx-http-flv-module是基于nginx-rtmp-module开发的&#xff0c;包含nginx-rt…

01-51单片机硬件基础

开发板介绍 学校授课用的是普中科技的EM3.V2.2开发板&#xff0c;没什么好说的&#xff0c;记着去淘宝上找原理图&#xff0c;别迷信课本。 网上有卖51最小系统板的&#xff0c;比开发板便宜&#xff0c;也有下载模块&#xff0c;可以自己搭建外围电路。 还可以自己在protue…

使用 Database Tools 实现高效数据查询的十大 IntelliJ IDEA 快捷键

得益于 IntelliJ IDEA Ultimate 的 Database Tools&#xff08;数据库工具&#xff09;中的专用 SQL 查询控制台&#xff0c;您无需离开 IDE 即可轻松修改连接到您的 Java 应用程序的任何数据库中的数据&#xff0c;以及从这些数据库中提取数据。 查询控制台具有 SQL 语句特定的…

【新人系列】Python 入门(十六):正则表达式

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

资料分析题

1、截位除 差距10% 以内 差距小 否则 差距大 2、基期与现期 3、同比与环比

SpringBoot进阶 - 自定义starter

文章目录 思路封装Starter使用starter 思路 创建模块&#xff0c;封装starter&#xff0c;最后使用starter. 1 - 创建一个Demo Project&#xff0c;模拟一个需要被封装的DemoModule模块&#xff0c;其中核心方法为exeModuleMethod 2 - 通过starter封装可以直接初始化DemoModule…

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制&#xff1a; sock…

Elasticsearch高性能实践

前言 本方案主要从运维层面分析es是实际生产使用过程中的参数优化&#xff0c;深入理解es各个名词及含义&#xff0c;深入分析es的使用过程中应注意的点&#xff0c;详细解释参数设置的原因以及目的&#xff0c;主要包括系统层面&#xff0c;参数层面。除此之外&#xff0c;优…