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



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

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

相关文章

CNAS软件实验室认可费用清单,如何规划预算方案?

CNAS软件实验室在申请认可前&#xff0c;需要按照CNAS相关认可文件的要求&#xff0c;建立完善的CNAS软件实验室质量管理体系&#xff0c;试运行六个月&#xff0c;且覆盖全部质量要素后&#xff0c;向CNAS认可委提交申请&#xff0c;等待专家的审查。在前期的筹备工作中&#…

【2024 Dec 超实时】编辑安装llama.cpp并运行llama

首先讲一下环境 这是2024 年12月&#xff0c;llama.cpp 的编译需要cmake 呜呜呜 网上教程都是make 跑的。反正我现在装的时候make已经不再适用了&#xff0c;因为工具的版本&#xff0c;捣鼓了很久。 ubuntu 18 conda env内置安装。 以下是可以完美编译llama.cpp的测试工具版…

优化移动端H5:常见问题与解决方案

移动端H5开发中的“坑”与解决方案 本文介绍了开发中遇到的几个关于移动端H5开发中的小问题&#xff0c;以及解决的方法。 一、iOS滑动不流畅问题 在iOS设备上&#xff0c;H5页面的滑动效果有时会出现不流畅的情况&#xff0c;特别是在页面高度超过一屏时。这通常是由于iOS的…

Visual Studio 2022+CMake配置PCL1.14.1

前言 本教程只是提供高效的PCL配置流程&#xff0c;不提供Qt环境配置&#xff0c;如果需要GUI界面&#xff0c;则需要自寻查找Cmake配置QT的教程。请相信&#xff0c;在CMake之下没有任何事是困难的&#xff0c;最困难的工作已经由前辈们完成。因此&#xff0c;对于C用户来说学…

C++多线程实战:掌握图像处理高级技巧

文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 导读 在当今的计算世界中,…

C++在关键嵌入式软件领域逐步取代 Ada 的演进历程

第一章&#xff1a;引言 1.1 Ada 与 C在嵌入式系统中的角色 在嵌入式系统开发领域的漫长演进历程中&#xff0c;Ada 与 C宛如两颗璀璨而又各具特色的星辰&#xff0c;交替影响着该领域的发展轨迹。它们不仅代表了两种不同的编程哲学&#xff0c;也反映了不同时期对软件可靠性…

高项 - 法律法规与标准规范

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 法律法规与标准规范法律法规民法典&#xff08;合同编&#xff09;招标投标法政府采购法专利法著作权法商…

EXCEL数据清洗的几个功能总结备忘

目录 0 参考教材 1 用EXCEL进行数据清洗的几个功能 2 删除重复值&#xff1a; 3 找到缺失值等 4 大小写转换 5 类型转化 6 识别空格 0 参考教材 精通EXCEL数据统计与分析&#xff0c;中国&#xff0c;李宗璋用EXCEL学统计学&#xff0c;日EXCEL统计分析与决策&#x…

基于小程序实现地图定位、轨迹绘制、地图标点、快捷导航、唤醒导航APP、开箱即用

目录 前言研究背景与意义研究目标与内容研究方法与技术路线小程序地图组件介绍定位技术与原理轨迹绘制技术地图标注与标记功能地图定位与轨迹绘制功能实现定位功能设计与实现获取用户当前位置总结说明代码块前言 研究背景与意义 地图定位和轨迹追踪作为智能手机中常见的功能之…

计算机网络之网络层超详细讲解

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

【数字花园】数字花园(个人网站、博客)搭建经历汇总教程

目录 写在最最前面第一章&#xff1a;netlify免费搭建数字花园相关教程使用的平台步骤信息管理 第二章&#xff1a;本地部署数字花园数字花园网站本地手动部署方案1. 获取网站源码2.2 安装 Node.js 3. 项目部署3.1 安装项目依赖3.2 构建项目3.3 启动http服务器 4. 本地预览5. 在…

计算机毕业设计Python+Vue.js游戏推荐系统 Steam游戏推荐系统 Django Flask 游 戏可视化 游戏数据分析 游戏大数据 爬虫 机

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

问题 C: B001 快乐的蠕虫

题目描述 有一只快乐的蠕虫居住在一个mn大小的网格中。在网格的某些位置放置了k块石头。网格中的每个位置要么是空的&#xff0c;要么放置了一块石头。当蠕虫睡觉时&#xff0c;它在水平方向或垂直方向上躺着&#xff0c;把身体尽可能伸展开来。蠕虫的身躯既不能进入到放有石块…

Qt实现自定义行编辑器

引言 开发环境项目结构ui界面设计示例代码运行效果总结qt中原有的行编辑器无法满足当前的需要,所以需要自定义行编辑器。 通过上下按键切换到不同的行编辑器,在选中的行编辑器中输入数字,编辑器呈现边框,编辑后按下回车键保存之前编辑的数值,没有按下回车键直接切换上下键…

得物使用AutoMQ构建海量数据处理的新一代可观测性架构

引言 得物作为全球领先的潮流网购社区&#xff0c;日益增长的用户和数据带来了巨大的技术挑战。当前&#xff0c;得物的可观测性平台每天生成数PB级Trace数据和数万亿条Span记录&#xff0c;要求平台具备高效的实时处理能力和低成本的数据存储解决方案。 传统的存算一体架构将…

视图、转发与重定向、静态资源处理

目录 视图 默认视图 视图机制原理 自定义视图 请求转发与重定向 静态资源处理 视图 每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性 可以通过 order 属性指定解析器的优先顺序&#xff0c;order 越小优先级越高 默认是最低优先级&#xff0c;Integer.MAX_…

Redis 生产问题(重要)

缓存穿透 什么是缓存穿透&#xff1f; 缓存穿透说简单点就是大量请求的 key 是不合理的&#xff0c;根本不存在于缓存中&#xff0c;也不存在于数据库中 。这就导致这些请求直接到了数据库上&#xff0c;根本没有经过缓存这一层&#xff0c;对数据库造成了巨大的压力&#xf…

【Redis】壹 —— Redis 介绍

文章目录&#xff1a; 前言 一、认识Redis 1. Redis 用途 作为数据库 作为流引擎 二、服务端高并发分布式结构演变 1. 单机架构 2. 应用数据分离架构 3. 应用服务集群架构 4. 读写分离 / 主从分离架构 5. 冷热分离 —— 引入缓存 6. 分库分表 7. 微服务架构 8. …

auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式

目录 1、auto-gptq是什么&#xff1f;2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题&#xff08;1&#xff09;爆出&#xff1a;CUDA extension not installed.&#xff08;2&#xff09;没有报错但是推理速度超级慢 1、auto-gptq是什么&#xff1f; Auto-GPTQ 是一…

AI 的时代,新科技和新技术如何推动跨学科的整合?

在当前AI的发展中&#xff0c;我们面临的一个主要挑战就是融合的问题&#xff0c;这实际上不仅是技术上的融合&#xff0c;还有更深层次的哲学层面的思考。 或许在中国这方面的讨论较少&#xff0c;但在西方哲学和神学的语境中&#xff0c;探讨万物的根本和不同学科之间的联系…