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

news2025/4/7 3:42:34

目录

一、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>(子模块间的聚合或依赖)。



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leecode刷题C语言之K次乘法运算后的最终数组①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {int *ret (int *)malloc(sizeof(int) * numsSize);memcpy(ret, nums, sizeof(int) * numsSize);while (k…

Source Insight 4.0的安装

一、安装与破解 1、下载Source Insight 4.0安装包 https://pan.baidu.com/s/1t0u1RM19am0lyzhlNTqK9Q?pwdnvmk 2、下载程序破解补丁包 https://pan.baidu.com/s/1irvH-Kfwjf4zCCtWJByqJQ 其中包含文件si4.pediy.lic 和 sourceinsight4.exe。 3、安装下载的Source Insight …

UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案

UNIX系统常见故障表现&#xff1a; 1、存储结构出错&#xff1b; 2、数据删除&#xff1b; 3、文件系统格式化&#xff1b; 4、其他原因数据丢失。 UNIX系统常见故障解决方案&#xff1a; 1、检测UNIX系统故障涉及的设备是否存在硬件故障&#xff0c;如果存在硬件故障&#xf…

重生之我在异世界学编程之C语言:深入文件操作篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 函数递归与迭代 引言正文一、为什么要用文件二、文…

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的&#xff1f; 在上一篇中&#xff0c;我们用任意一个内网的终端都能访问到百度的服务器&#xff0c;但是这是我们在互联网设备上面做了回程路由才实现的&#xff0c;在实际中&#xff0c;之前也说过运营商是不会写任何路由过来的&#xff0c;那对于…

VSCode 报错:rust-analyzer requires glibc >= 2.28 in latest build

报错信息 /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.953/server/rust-analyzer: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.29 not found (required by /home/jake/.vscode-server-insiders/extensions/matklad.rust-analyzer-0.3.9…

软考:工作后再考的性价比分析

引言 在当今的就业市场中&#xff0c;软考&#xff08;软件设计师、系统分析师等资格考试&#xff09;是否值得在校学生花费时间和精力去准备&#xff1f;本文将从多个角度深入分析软考在不同阶段的性价比&#xff0c;帮助大家做出明智的选择。 一、软考的价值与局限性 1.1 …

Hadoop一课一得

Hadoop作为大数据时代的奠基技术之一&#xff0c;自问世以来就深刻改变了海量数据存储与处理的方式。本文将带您深入了解Hadoop&#xff0c;从其起源、核心架构、关键组件&#xff0c;到典型应用场景&#xff0c;并结合代码示例和图示&#xff0c;帮助您更好地掌握Hadoop的实战…

HTML综合

一.HTML的初始结构 <!DOCTYPE html> <html lang"en"><head><!-- 设置文本字符 --><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 设置网页…

c#笔记2024

Ctrl r e自动添加get和set CompositeCurve3d 复合曲线 List<Entity> entS listline.Cast<Entity>().ToList();//list类型强转 前面拼上\u0003&#xff0c;就可以实现&#xff0c;不管有没有命令都能打断当前命令的效果 取消其他命令&#xff1a;Z.doc.SendStri…

debian12学习笔记

前置条件 基于debian12官网的qcow2格式文件进行操作 安装ssh 登录虚拟机后安装ssh服务端 apt install openssh-server配置国内源 新增/etc/apt/sources.list.d/tsinghua.list 使用清华大学的源 https://www.cnblogs.com/shanhubei/p/18104430 deb https://mirrors.tuna.t…

supervision - 好用的计算机视觉 AI 工具库

Supervision库是一款出色的Python计算机视觉低代码工具&#xff0c;其设计初衷在于为用户提供一个便捷且高效的接口&#xff0c;用以处理数据集以及直观地展示检测结果。简化了对象检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型&#xff0c;就能轻…

QT图形/视图架构详解(一)

场景、视图与图形项 图形/视图架构主要由 3 个部分组成&#xff0c;即场景、视图和图形项&#xff0c;三者的关系如图所示&#xff1a; 场景、视图和图形项的关系 场景&#xff08;QGraphicsScene 类&#xff09; 场景不是界面组件&#xff0c;它是不可见的。场景是一个抽象的…

RANS(Reynolds-Averaged Navier-Stokes) 湍流模型类型

RANS&#xff08;Reynolds-Averaged Navier-Stokes&#xff09; 湍流模型有多种不同的类型&#xff0c;除了标准的 kkk-ω 湍流模型&#xff0c;还有其他一些常用的湍流模型。RANS 模型的核心思想是对 Navier-Stokes 方程进行 雷诺平均&#xff0c;通过将流动场的瞬时变量分解为…

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下&#xff1a; oracle12 以前的写法&#xff1a; selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法&#xff1a; selectt.pro_ids,listagg(DIS…

使用 GD32F470ZGT6,手写 I2C 的实现

我的代码&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code I2C 具体代码位置&#xff1a;https://gitee.com/a1422749310/gd32_-official_-code/blob/master/Hardware/i2c/i2c.c 黑马 - I2C原理 官方 - IIC 协议介绍 个人学习过程中的理解&#xff0c;有错误&…

【Unity踩坑】Unity生成iOS的XCode项目时提示错误:xcrun: error: SDK “iphoneos“ cannot be located

问题描述&#xff1a; Unity生成iOS的Xcode项目时&#xff0c;出现错误&#xff1a;xcrun: error: SDK “iphoneos” cannot be located 解决方法&#xff1a; 运行Xcode, 打开设置-Locations&#xff0c;将Command Line Tools里下拉项再选择一下。&#xff08;不管之前有没有…

用前端html如何实现2024烟花效果

用HTML、CSS和JavaScript编写的网页&#xff0c;主要用于展示“2024新年快乐&#xff01;”的文字形式烟花效果。下面是对代码主要部分的分析&#xff1a; HTML结构 包含三个<canvas>元素&#xff0c;用于绘制动画。引入百度统计的脚本。 CSS样式 设置body的背景为黑…

React的状态管理库-Redux

核心思想&#xff1a;单一数据源、状态是只读的、以及使用纯函数更新状态。 组成部分 Store&#xff08;存储&#xff09; 应用的唯一状态容器&#xff0c;存储整个应用的状态树,使用 createStore() 创建。 getState()&#xff1a;获取当前状态。dispatch(action)&#xff…

Unity WebGL 编译和打包说明(官方文档翻译校正)

目录 Unity WebGL 编译和打包说明WebGL 简介WebGL 浏览器兼容性 (WebGL Browser Compatibility)平台支持 (Platform Support)多线程支持限制多线程支持的因素安装 Unity Hub 并添加所需模块WebGL 开发WebGL Player 设置Resolution and PresentationResolutionWebGL TemplateSpl…