Maven【4】(继承)(命令行操作)

news/发布时间2024/9/20 6:07:33

文章目录

  • 【1】基础概念
  • 【2】继承的作用
  • 【3】创建父工程和子工程
  • 【4】在父工程中统一管理依赖


【1】基础概念

说到继承,我们很容易想到Java中的继承,有子类和父类,子类继承父类,那么我们maven中的继承是什么呢?
Maven工程之间,A 工程继承 B 工程
A 工程:子工程
B 工程:父工程
本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置,本质上是pom文件里的配置内容的继承。

【2】继承的作用

在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。
对一个比较大型的项目进行了模块拆分。一个 project 下面,创建了很多个 module。每一个 module 都需要配置自己的依赖信息。
那为什么要这样设计呢?是因为:
1.在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。
2.使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
3.使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
所以通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

【3】创建父工程和子工程

创建的命令和前面创建 pro01-maven-java 一样:

mvn archetype:generate

然后指定一下坐标:
在这里插入图片描述
我们工程创建好之后,要修改它的打包方式:

<groupId>com.atxiaoyu.maven</groupId><artifactId>pro03-maven-parent</artifactId><version>1.0-SNAPSHOT</version><!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom --><packaging>pom</packaging>

(因为只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程。)
创建完父工程后,我们再创建几个子工程(模块工程),需要进入 pro03-maven-parent 工程的根目录,然后运行 mvn archetype:generate 命令来创建模块工程。

我们这里创建三个子工程:

在这里插入图片描述
我们创建完后可以发现,父工程的pom.xml文件会自动的被修改:
在这里插入图片描述
然后我们打开子工程后会发现会自动配置父工程,parent就是给当前子工程指定父工程:(通过指定父工程的坐标找到父工程)
在这里插入图片描述

这里还要注意一点,如果子工程的groupId和version与父工程的一样,那么子工程的groupId和version就可以省略。(一般来说子工程的groupId和version与父工程的都是一样的)
在这里插入图片描述

【4】在父工程中统一管理依赖

省略groupId和version并不是我们的目的,我们的目的是让父工程管理我们依赖的版本
我们使用dependencyManagement标签配置对依赖的管理。
我们举个例子,在父工程中加入下列代码:

<dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.0.0.RELEASE</version></dependency></dependencies>
</dependencyManagement>

然后我们可以在子工程中引用那些被父工程管理的依赖,子工程引用父工程中的依赖信息时,可以把版本号去掉,把版本号去掉就表示子工程中这个依赖的版本由父工程决定。
在这里插入图片描述

还要注意一点,就是在父工程中改变依赖信息的版本,子工程中也会跟着改变。
在这里插入图片描述
我们还可以在父工程中声明自定义属性,就像这样:

<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 自定义标签,维护Spring版本数据(标签的名字是我们自己定的,根据自己的需要,自己去设定标签的名字) --><atxiaoyu.spring.version>4.3.6.RELEASE</atxiaoyu.spring.version>
</properties>

然后在使用${}的形式来引用自定义的属性名(依赖的版本就变成一个表达式了):

      <dependencyManagement><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${atxiaoyu.spring.version}</version></dependency></dependencyManagement>

这样就真正实现了“一处修改,处处生效”。

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

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

相关文章

海外媒体推广发稿平台之选快速提升品牌知名度的8个方法-华媒舍

随着全球化趋势的加深&#xff0c;海外市场对于企业来说变得越来越重要。在海外媒体上宣传品牌是提升知名度和开拓新客户的关键步骤。本文将为您介绍8个使用海外媒体推广发稿平台来快速提升品牌知名度的秘籍。 1. 选择可信赖的平台 在选择推广发稿平台时&#xff0c;首先要确保…

化妆品汞含量检测FDA 21 CFR700.13 标准

化妆品汞含量检测FDA 21 CFR700.13 标准 化妆品汞含量检测FDA 21 CFR700.13 标准 汞是一种有毒的元素&#xff0c;在化妆品中是一种禁用的成分。然而&#xff0c;汞在一些非正规的产品中仍然存在&#xff0c;给消费者的健康带来了潜在的危害。因此&#xff0c;对于化妆品生产企…

正向代理的反爬虫与防DDoS攻击:保护网站免受恶意行为

目录 前言 一、正向代理的原理 二、正向代理的反爬虫功能 1. IP地址隐藏 2. 请求多样化 三、正向代理的防DDoS攻击功能 1. 均衡负载 2. IP过滤 结论 前言 在当前互联网环境下&#xff0c;网站常常受到各种恶意行为的侵袭&#xff0c;其中包括爬虫和DDoS攻击。这些行为…

Android java基础_异常

一.异常的概念 在Java中&#xff0c;异常&#xff08;Exception&#xff09;是指程序执行过程中可能出现的不正常情况或错误。它是一个事件&#xff0c;它会干扰程序的正常执行流程&#xff0c;并可能导致程序出现错误或崩溃。 异常在Java中是以对象的形式表示的&#xff0c;…

我的NPI项目之设备系统启动(八) -- Android14的GKI2.0开发步骤和注意事项

GKI是什么&#xff1f; Google为什么要推行GKI&#xff1f; GKI全称General Kernel Image。GKI在framework和kernel之间提供了标准接口&#xff0c;使得android OS能够轻松适配/维护/兼容不同的设备和linux kernel。 Google引入GKI的目的是将Framework和Kernel进一步的解耦。因…

Peter算法小课堂—动态规划

Peter来啦&#xff0c;好久没有更新了呢 今天&#xff0c;我们来讨论讨论提高组的动态规划。 动态规划 动态规划有好多经典的题&#xff0c;有什么背包问题、正整数拆分、杨辉三角……但是&#xff0c;如果考到陌生的题&#xff0c;怎么办呢&#xff1f;比如说2000年提高组的…

Nacos配置

目录 启动nacos 项目步骤 Nacos服务分级存储模型​编辑 服务跨域集群调用问题 NacosRule负载均衡 服务实例的权重设置 环境隔离-namespace Nacos环境隔离 Nacos和Eureak对比 临时实例和非临时实例 Ncaos与Eureka的共同点 Nacos与Eureka的区别 Nacos配置管理 统一配…

我承认,我低估鸿蒙了 !

2019年&#xff0c;鸿蒙刚出来的时候&#xff0c;我心里是有点犯嘀咕的&#xff0c;虽然很支持国产操作系统&#xff0c;但是我知道&#xff0c;开发操作系统也许不难&#xff0c;但是建立一个全新的生态太难了&#xff01; 如果操作系统中缺乏应用程序&#xff0c;就不会有人…

排序——希尔排序

希尔排序 希尔排序步骤 希尔排序的核心还是插入排序&#xff0c;但是把插入排序分成两部分&#xff0c;1.预排序2.插入排序。先对原数组进行预排序&#xff0c;使数组接近有序&#xff08;让更大的数字和更小的数字更快的分配到两边&#xff09;&#xff0c;然后再对已经接近有…

模拟算法题练习(二)(DNA序列修正、无尽的石头)

目录 &#xff08;一、DNA序列修正&#xff09; 问题分析 方法实现 时间复杂度和空间复杂度分析 &#xff08;二、无尽的石头&#xff09; &#xff08;一、DNA序列修正&#xff09; 问题描述 在生物学中&#xff0c;DNA序列的相似性常被用来研究物种间的亲缘关系。现在我…

MySQL深入——22

kill不掉的语句 在MySQL当中有两个kill命令一个是kill query 线程id表示中止这个线程当中正在执行的语句&#xff0c;另外一个是 kill Connection线程id表示断开这个连接。 在使用MySQL时&#xff0c;使用kill命令之后看show processlist显示的command列为killed&#xff0c;…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-34-处理https 安全问题或者非信任站点-下篇

1.简介 这一篇宏哥主要介绍playwright如何在IE、Chrome和Firefox三个浏览器上处理不信任证书的情况&#xff0c;我们知道&#xff0c;有些网站打开是弹窗&#xff0c;SSL证书不可信任&#xff0c;但是你可以点击高级选项&#xff0c;继续打开不安全的链接。举例来说&#xff0c…

自动化测试摸索:python+selenium+pytest(持续更新.....)

一、环境搭建 1、python 安装 下载链接&#xff1a;Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时&#xff0c;找到该安装程序&#xff1a;python-3.12.2-amd64.exe文件&#xff0c;双击启动安装向导。 为了防止C:盘文件因系统故障或者无…

CDN原理探究

来源于百度&#xff1a; https://baike.baidu.com/item/%E5%86%85%E5%AE%B9%E5%88%86%E5%8F%91%E7%BD%91%E7%BB%9C/4034265?frge_ala 通过上图&#xff0c;我们可以了解到&#xff0c;使用了CDN缓存后的网站的访问过程变为&#xff1a; 用户向浏览器提供要访问的域名&#xff…

unsigned详讲(干货满满)

前言&#xff1a;过年偷懒了(●ˇ∀ˇ●)&#xff0c;但是年后开学了一定要恢复学习状态&#xff0c;在复习加继续学习的途中&#xff0c;我发现对于unsigned关键字的掌握并不是很熟练&#xff0c;于是翻阅了各个大佬的博客以及书籍&#xff0c;总结了对于unsigned的一些知识点…

pip降级在pycharm中

PyCharm依赖于"–build-dir"参数安装第三方库&#xff0c;但该参数在最新的23.0版pip中已删除 解决办法就是降级pip&#xff0c;PyCharm中选择File&#xff0c;找到编译器&#xff0c;点击pip&#xff0c;勾选对应版本即可 或者在cmd中执行运行python -m pip install…

大语言模型推理加速技术:计算加速篇

原文&#xff1a;大语言模型推理加速技术&#xff1a;计算加速篇 - 知乎 目录 简介 Transformer和Attention 瓶颈 优化目标 计算加速 计算侧优化 KVCache Kernel优化和算子融合 分布式推理 内存IO优化 Flash Attention Flash Decoding Continuous Batching Page…

Redis冲冲冲——事务支持,AOF和RDB持久化

目录 引出Redis事务支持&#xff0c;AOF和RDB持久化1、Redis的事务支持2、Redis的持久化 Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——事务支持&#xff0c;AOF和RDB持久化 Redis事务支持&#xff0c;AOF和…

Mybatis批量更新对象数据的两种方法

说明&#xff1a;遇到一次需要批量修改对象的场景。传递一个对象集合&#xff0c;需要根据对象ID批量修改数据库数据&#xff0c;使用的是MyBatis框架。查了一些资料&#xff0c;总结出两种实现方式。 创建Demo 首先&#xff0c;创建一个简单的Demo&#xff1b; &#xff08…

K8S存储卷与PV,PVC

一、前言 Kubernetes&#xff08;K8s&#xff09;中的存储卷是用于在容器之间共享数据的一种机制。存储卷可以在多个Pod之间共享数据&#xff0c;并且可以保持数据的持久性&#xff0c;即使Pod被重新调度或者删除&#xff0c;数据也不会丢失。 Kubernetes支持多种类型的存储卷…
推荐文章