当前位置: 首页 > news >正文

【Maven】继承和聚合

5. Maven的继承和聚合

5.1 什么是继承

Maven 的依赖传递机制可以一定程度上简化 POM 的配置,但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本且这些模块之间不存在依赖关系,这就导致同一个依赖需要在多个模块中重复声明,这显然是不可取的,大量的前人经验告诉我们,重复往往意味着更多的劳动和更高的潜在风险。

请添加图片描述

在 Java 面向对象中,我们可以建立一种类的父子结构,然后在父类中声明一些字段和方法供子类继承,这样就可以一定程度上消除重复,做到 “一处声明,多处使用”。在 Maven 的世界中,也有类似的机制,它就是 POM 继承。

Maven 在设计时,借鉴了 Java 面向对象中的继承思想,提出了 POM 继承思想。当一个项目包含多个模块时,可以在该项目中再创建一个父模块,并在其 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。

对于父模块而言,其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 pom。

请添加图片描述

子工程可以继承的父工程的元素:

在这里插入图片描述

properties 示例:

演示一:在父模块下创建 JavaSE 子模块

1、创建 maven_fu 模块,作为父模块。因为父模块不提供代码,所以删除 src 目录,在父模块下只保留 pom.xml 文件。

2、在 maven_fu 模块的 pom.xml 文件中使用 定义好依赖;使用 定义好插件。

3、创建 JavaSE 模块 maven_zi_javase,在模块中引入依赖。

测试结果如下图:

  • 在父工程中,使用 统一指定依赖的版本。
  • 在子模块 maven_zi_javase 中直接使用 G、A 引入依赖,不需要指定 V。
  • 父工程只负责声明依赖,不会实际引入依赖。

请添加图片描述

演示二:在父模块下创建 Java Web 子模块

1、在 maven_fu 模块的 pom.xml 文件中添加 servlet 依赖。

2、创建 Java Web 模块 maven_zi_javaweb,在模块中引入 servlet 依赖。
请添加图片描述

3、在 maven_zi_javaweb 模块的插件中运行 tomcat7:run
请添加图片描述

4、浏览器访问:
请添加图片描述

总结:一句话,通过继承可以实现子工程沿用父工程的配置,大大减少重复设置。

5.2 什么是聚合

使用 Maven 聚合功能对项目进行构建时,需要在该项目中额外创建一个的聚合模块,然后通过这个模块构建整个项目的所有模块。聚合模块仅仅是帮助聚合其他模块的工具,其本身并无任何实质内容,因此聚合模块中只有一个 POM 文件,不包含 src 等目录。

与父模块相似,聚合模块的打包方式(packaging)也是 pom,用户可以在其 POM 中通过 modules 下的 module 子元素来添加需要聚合的模块的目录路径。父模块的 pom.xml 文件的 把子模块聚集起来。

示例一:具有父子关系的项目中,可以直接在父模块中执行构建流程

maven_fu 有 2 个子模块 maven_zi_javase 和 maven_zi_javaweb。直接在 maven_fu 的生命周期里执行构建流程,也会应用到子模块中:

1、在 maven_fu 中执行 package
请添加图片描述

2、子模块成功打包:
请添加图片描述

示例二:在无依赖关系的模块间,使用聚合实现统一构建

1、创建聚合模块 0_maven_juhe,模块内只保留 pom.xml 文件。

2、创建 JavaSE 模块 1_maven_javase,模块内只保留 pom.xml 文件,创建子模块 1_maven_javase_zi。

3、创建 JavaWeb模块 2_maven_javaweb。

4、在 0_maven_juhe 的 pom.xml 文件中指定打包方式为 pom;通过 modules 标签指定需要聚合的模块。

请添加图片描述

执行 package 命令,查看打包情况:

请添加图片描述

具体构建流程如下:

C:\Softwares\Developer_Kits\JDK\jdk1.8.0_131\bin\java.exe -Dmaven.multiModuleProj ......
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] 1_maven_javase                                                     [pom] // JavaSE模块
[INFO] 1_maven_javase_zi                                                  [jar] // JavaSE模块的子模块
[INFO] 2_maven_javaweb Maven Webapp                                       [war] // JavaWeb模块
[INFO] 0_maven_juhe                                                       [pom] // 聚合模块
[INFO] 
[INFO] --------------------< cn.myphoenix:1_maven_javase >---------------------
[INFO] Building 1_maven_javase 1.0-SNAPSHOT                               [1/4]
[INFO]   from ..\1_maven_javase\pom.xml
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] -------------------< cn.myphoenix:1_maven_javase_zi >-------------------
[INFO] Building 1_maven_javase_zi 1.0-SNAPSHOT                            [2/4]
[INFO]   from ..\1_maven_javase\1_maven_javase_zi\pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ 1_maven_javase_zi ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ 1_maven_javase_zi ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ 1_maven_javase_zi ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\1_maven_javase\1_maven_javase_zi\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ 1_maven_javase_zi ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ 1_maven_javase_zi ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ 1_maven_javase_zi ---
[INFO] Building jar: C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\1_maven_javase\1_maven_javase_zi\target\1_maven_javase_zi-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --------------------< cn.myphoenix:2_maven_javaweb >--------------------
[INFO] Building 2_maven_javaweb Maven Webapp 1.0-SNAPSHOT                 [3/4]
[INFO]   from ..\2_maven_javaweb\pom.xml
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ 2_maven_javaweb ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ 2_maven_javaweb ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ 2_maven_javaweb ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\2_maven_javaweb\src\test\resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ 2_maven_javaweb ---
[INFO] No sources to compile
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ 2_maven_javaweb ---
[INFO] No tests to run.
[INFO] 
[INFO] --- maven-war-plugin:2.2:war (default-war) @ 2_maven_javaweb ---
[INFO] Packaging webapp
[INFO] Assembling webapp [2_maven_javaweb] in [C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\2_maven_javaweb\target\2_maven_javaweb]
[INFO] Processing war project
[INFO] Copying webapp resources [C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\2_maven_javaweb\src\main\webapp]
[INFO] Webapp assembled in [33 msecs]
[INFO] Building war: C:\Coding_Gallery\Intellij_IDEA_Workspace\learning_maven\2_maven_javaweb\target\2_maven_javaweb.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] 
[INFO] ---------------------< cn.myphoenix:0_maven_juhe >----------------------
[INFO] Building 0_maven_juhe 1.0-SNAPSHOT                                 [4/4]
[INFO]   from pom.xml
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for 0_maven_juhe 1.0-SNAPSHOT:
[INFO] 
[INFO] 1_maven_javase ..................................... SUCCESS [  0.000 s]
[INFO] 1_maven_javase_zi .................................. SUCCESS [  0.832 s]
[INFO] 2_maven_javaweb Maven Webapp ....................... SUCCESS [  0.386 s]
[INFO] 0_maven_juhe ....................................... SUCCESS [  0.000 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.311 s
[INFO] Finished at: 2024-11-27T20:02:00+08:00
[INFO] ------------------------------------------------------------------------Process finished with exit code 0

思考:继承和聚合很相似,只是继承具有依赖关系,而聚合是统一构建毫无关系的模块。

总结:一句话,聚合就是集中构建项目的。

相关文章:

【Maven】继承和聚合

5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置&#xff0c;但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本&#xff0c;且这些模块之间不存在依赖关系&#xff0c;这就导致同一个依赖…...

【线上问题记录 | 排查网络连接问题】

问题描述 现在有我们程序是部署在服务器A的&#xff0c;A链接的是B。程序从B的redis进行存储和取数据的。 我们的业务是: 信息展示&#xff0c;也就是如果发现机器有异常了&#xff0c;实时进行监控。突然发现有一天&#xff0c;信息显示延迟了。 然后我们就开始排查究竟什么原…...

springboot车辆管理系统设计与实现(代码+数据库+LW)

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了车辆管理系统的开发全过程。通过分析车辆管理系统管理的不足&#xff0c;创建了一个计算机管理车辆管理系统的方案。文章介绍了车辆管理系统的系统分析部分&…...

独家|京东调整职级序列体系

原有的M、P、T、S主序列将正式合并为新的专业主序列P。 作者|文昌龙 编辑|杨舟 据「市象」独家获悉&#xff0c;京东已在近日在内部宣布对职级序列体系进行调整&#xff0c;将原有的M、P、T、S主序列正式合并为新的专业主序列P&#xff0c;合并后的职级体系将沿用原有专业序…...

Arrays.copyOfRange(),System.arraycopy() 数组复制,数组扩容

Arrays.copyOfRange() 当需要将数组中的 长度扩容时, 数组复制 使用 需要用到Arrays 类提供的的 参数解析 * param original the array from which a range is to be copied * param from the initial index of the range to be copied, inclusive * param to the final ind…...

Python学习37天

# 魔术方法 # 创建类Monster,默认为object的子类 class Monster: name None age None gender None def __init__(self, name, age, gender): self.name name self.age age self.gender gender # 重写魔术方法__str__输出实例对象信息…...

flask的第一个应用

本文编写一个简单的实例来记录下flask的使用 文章目录 简单实例flask中的路由 简单实例 flask的依赖包都安装好之后&#xff0c;我们就可以写一个最简单的web应用程序了&#xff0c;我们把这个应用程序命名为first.py: from flask import Flaskapp Flask(__name__)app.route(/…...

【论文格式】同步更新中

1横向和纵向坐标的坐标密度不能太大&#xff0c;显示太多看起来不好看&#xff0c;本课题组采用emf&#xff0c;目前使用页面内紧凑&#xff0c;600dpi 2Force(kN):k小写 3涉及到变量的&#xff0c;变量本身斜体...

Java-GUI(登录界面示例)

简述&#xff1a; 步骤&#xff1a; (1)构造界面(将组件对象加入容器对象,注意&#xff1a;应设定对容器对象的布局策略&#xff09; (2)为界面加入事件响应处理(如单击按钮&#xff09; 实现&#xff1a; 两种方式实现&#xff0c;只有用户名为"admin"且密码为…...

看华为,引入IPD的正确路径

目录 前言 引发重视 作者简介 前言 华为将 IPD 的引入过程归结为三步&#xff1a; 先僵化、后优化、再固化。 如果只是单纯模仿&#xff0c;在不清楚底层逻辑的情况下&#xff0c; 就开始走先僵化的流程&#xff0c;去搞削足适履式的引入。 开始执行后&#xff0c;你就…...

计算机毕业设计Spark+大模型知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

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

pcb线宽与电流

三十年一路高歌猛进的中国经济&#xff0c; 中国经历了几个三十年&#xff1f; 第一个三十年&#xff1a;以计划为导向。 第二个三十年&#xff1a;以经济为导向。 现在&#xff0c;第三个三十年呢&#xff1f; 应该是以可持续发展为导向。 传统企业摇摇欲坠&#xff0c; 新兴企…...

w~视觉~合集26

我自己的原文哦~ https://blog.51cto.com/whaosoft/12663170 #InternVL 本文设计了一个大规模的视觉-语言基础模型&#xff08;InternVL&#xff09;&#xff0c;将视觉基础模型的参数扩展到60亿&#xff0c;并逐步与LLM对齐&#xff0c;利用来自不同来源的网络规模的图像-文…...

Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

一、前言 之前做的监控系统&#xff0c;已经实现了在windows上硬解码比如dxva2和d3d11va&#xff0c;后续又增加了linux上的硬解vdpau的支持&#xff0c;这几种方式都是跨系统的硬解实现方案&#xff0c;也是就是如果都是windows系统&#xff0c;无论X86还是ARM都通用&#xf…...

【Qt】图片绘制不清晰的问题

背景 实现一个图片浏览器&#xff0c;可以支持放大/缩小查看图片。主要组件如下&#xff1a; // canvaswidget.h #ifndef CANVASWIDGET_H #define CANVASWIDGET_H#include <QWidget>class CanvasWidget : public QWidget {Q_OBJECT public:explicit CanvasWidget(QImag…...

2008年IMO几何预选题第3题

设有两个圆凸内接四边形 A B Q D ABQD ABQD 和 B P Q C BPQC BPQC, 在线段 P Q PQ PQ 上存在一点 E E E, 使得, ∠ E A P ∠ E D Q \angle EAP\angle EDQ ∠EAP∠EDQ, ∠ E B P ∠ E C Q \angle EBP\angle ECQ ∠EBP∠ECQ. 求证: A A A, B B B, C C C, D D D 四点共…...

NAT拓展

NAT ALG&#xff08;NAT应用级网&#xff09; 为某些应用层协议&#xff0c;因为其报文内容可能携带IP相关信息&#xff0c;而普通NAT转化无法将这些IP转化&#xff0c;从而导致协议无法正常运行 例如FTP&#xff0c;DHCP&#xff0c;RSTP&#xff0c;ICMP&#xff0c;IPSEC…...

Flink四大基石之State

State state 可以理解为-- 历史计算结果 有状态计算和无状态计算 无状态计算: 不需要考虑历史数据, 相同的输入,得到相同的输出!如:map, 将每个单词记为1, 进来一个hello, 得到(hello,1),再进来一个hello,得到的还是(hello,1) 有状态计算: 需要考虑历史数据, 相同的输入,可…...

Spacy小笔记:zh_core_web_trf、zh_core_web_lg、zh_core_web_md 和 zh_core_web_sm区别

Spacy小笔记 最近频繁用到spacy&#xff0c;就小记一下。 2024.11.29 zh_core_web_trf、zh_core_web_lg、zh_core_web_md 和 zh_core_web_sm区别 首先&#xff0c;它们都是预训练的中文模型&#xff1a; zh_core_web_trf:395M 架构: 基于 Transformer 架构&#xff08;bert…...

第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)

重要信息 2024年11月29日-12月1日 中国陕西西安石油大学雁塔校区 大会官网&#xff1a;www.icmsp.net 大会简介 第六届智能控制、测量与信号处理国际学术会议&#xff08;ICMSP 2024&#xff09;由西安石油大学、中海油田服务股份有限公司、浙江水利水电学院与中国石油装备…...

docker服务容器化

docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 ​ 利用docker可以很效率地搭建服务&#xff0c;本文在win1…...

【QT】控件8

1.QDial 通过调节旋钮位置来控制窗口的不透明度&#xff1a; void Widget::on_dial_valueChanged(int value) {qDebug()<<value;this->setWindowOpacity((double)value/100); }效果演示&#xff1a; 2.Date/Time Edit 计算两个日期的差值 ui界面设计 计算按钮按下…...

漫谈推理谬误——错误因果

相关文章 漫谈推理谬误——错误假设-CSDN博客文章浏览阅读736次&#xff0c;点赞22次&#xff0c;收藏3次。在日常生活中&#xff0c;我们会面临各种逻辑推理&#xff0c;有些看起来一目了然&#xff0c;有些非常的科学严谨&#xff0c;但也有很多似是而非&#xff0c;隐藏了陷…...

【数据结构】队列实现剖析:掌握队列的底层实现

在计算机科学中&#xff0c;**队列&#xff08;Queue&#xff09;**是一种常见的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。队列的应用非常广泛&#xff0c;例如任务调度、资源管理、进程通信等。本篇文章旨在为计…...

【C++】IO库(二):文件输入输出

8.2 文件输入输出 头文件 fstream 定义了三个类型来之支持文件IO&#xff0c;分别是&#xff1a; ifstream&#xff1a;从一个给定文件读取数据&#xff1b;ofstream&#xff1a;向一个给定文件写入数据&#xff1b;fstream&#xff1a;读写给定文件。 在 C 当中&#xff0c…...

105.【C语言】数据结构之二叉树求总节点和第K层节点的个数

目录 1.求二叉树总的节点的个数 1.容易想到的方法 代码 缺陷 思考:能否在TreeSize函数内定义静态变量解决size的问题呢? 其他写法 运行结果 2.最好的方法:分而治之 代码 运行结果 2.求二叉树第K层节点的个数 错误代码 运行结果 修正 运行结果 其他写法 1.求二…...

力扣637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 提示&#xff1a; 树中节点数量在 [1, 104] 范围内-231 < Node.val < 231 - 1 代码&#xff1a; /*** Definition for a binary tree node.* stru…...

【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践

关于Next.js 服务器端渲染&#xff08;SSR&#xff09;与客户端渲染&#xff08;CSR&#xff09;的实践内容方面&#xff0c;我们按下面几点进行阐述。 1. 原理 服务器端渲染 (SSR): 在服务器上生成完整的HTML页面&#xff0c;然后发送给客户端。这使得用户在首次访问时能够…...

路径规划之启发式算法之一:A-Star(A*)算法

A*算法是一种启发式搜索算法&#xff0c;常用于解决路径规划问题。 一、A*算法的定义与原理 A*算法是一种用于在图形或网格中查找最短路径的算法。它在搜索过程中综合考虑了每个节点的实际距离&#xff08;g值&#xff09;和预估距离&#xff08;h值&#xff09;&#xff0c;以…...

Android复习代码1-4章

public class RudioButton extends AppCompatActivity {Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_rudio_button);// 找到RadioGroup和TextView的实例RadioGroup radioGrou…...

学做网站应该看那些书/防控措施持续优化

50以内勾股数有哪些2020-03-22 09:10:09文/颜雨勾股数&#xff0c;又名毕氏三元数。勾股数就是可以构成一个直角三角形三边的一组正整数。接下来给大家分享50以内勾股数。50以内的勾股数3 4 55 12 136 8 109 12 1510 24 2512 16 2015 20 2518 24 3021 28 3524 32 4027 36 4530 …...

江都网站制作/seo快速排名软件案例

1、合并可以由MULI****做&#xff0c;但是做出来是个非标准的图形&#xff0c;不利于变换 2、使用from shapely.ops import unary_union 合并图形的数列 3、使用pandas添加地形数列&#xff0c;或做成字典 4、制定好 ‘geometry’ 列 GeoDataFrame 由anhui gpd.GeoDataFrame(d,…...

网站建设合同制人员招聘/网站开发用什么语言

一、原因低版本的 JVM 无法加载高版本的 class 文件造成的二、方案用相同的版本的Jdk编译和执行...

涟源网站seo/济南市新闻最新消息

前言&#xff1a;之前公司一直使用svn作为版本管理工具&#xff0c;用习惯了svn后来切换git后就感觉很不方便&#xff0c;很多地方都要用命令完成。在网上查到很多git相关的操作&#xff0c;都是使用命令操作的&#xff0c;明明windows上安装了TortoiseGit都界面化了&#xff0…...

网页 网 址网站区别/郑州网络推广平台

一、Hydra简介 hydra是一款开源的暴力密码破解工具&#xff0c;支持多种协议密码的破解。 二、常用命令 这里去除了字典生成部分&#xff0c;因为有专业的工具进行字典生成。而且hydra不适用于http(s)的破解&#xff0c;如果想进行http(s)的破解&#xff0c;请用 burpsuit进…...

潍城区建设局网站/百度竞价推广是什么

Java程序员&#xff0c;eclipse或者idea是常备的开发工具。idea又是近几年非常火爆的开发新宠了(低配电脑除外)&#xff0c;推荐几个提升效率的工具&#xff0c;并收集几个比较好的教程放在这里。 JRebel for IntelliJ 安装参考: https://blog.csdn.net/weixin_42831477/art…...