Maven工程继承和聚合关系

1. Maven工程继承关系

1.1 继承概念

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。

1.2 继承作用

在父工程中统一管理项目中的依赖信息。

它的背景是:

  • 对一个比较大型的项目进行了模块拆分。
  • 一个 project 下面,创建了很多个 module。
  • 每一个 module 都需要配置自己的依赖信息。

它背后的需求是:

  • 在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。
  • 使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。
  • 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
    通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

1.3 继承语法

  • 父工程(父工程无须写 java 代码,因此 src 删除,只留下 pom.xml 即可)
    <groupId>com.atguigu.maven</groupId>
    <artifactId>pro03-maven-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
    <packaging>pom</packaging>
    
  • 子工程(子工程在父工程下去创建,会发现子工程的 pom.xml 中多了一个 parent 标签)
    <!-- 使用parent标签指定当前工程的父工程 -->
    <parent><!-- 父工程的坐标 --><groupId>com.atguigu.maven</groupId><artifactId>pro03-maven-parent</artifactId><version>1.0-SNAPSHOT</version>
    </parent><!-- 子工程的坐标 -->
    <!-- 如果子工程坐标中的groupId和version与父工程一致,那么可以省略 -->
    <!-- <groupId>com.atguigu.maven</groupId> -->
    <artifactId>pro04-maven-module</artifactId>
    <!-- <version>1.0-SNAPSHOT</version> -->
    

父工程中使用 dependences 标签后,集成的依赖都会无条件的继承给子工程
在这里插入图片描述

1.4. 父工程依赖统一管理

  • 父工程声明版本(在 dependencyManagement 标签中再建立 dependencies 标签,这样父工程中的依赖就不会直接继承给子工程)
    <!-- 使用dependencyManagement标签配置对依赖的管理 -->
    <!-- 被管理的依赖并没有真正被引入到工程 -->
    <dependencyManagement><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.10</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>6.0.10</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.10</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>6.0.10</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>6.0.10</version></dependency></dependencies>
    </dependencyManagement>
    
  • 子工程引用版本(此时在子工程的 dependencies 标签中添加需要依赖的坐标,不许 version 标签,自动继承父工程的版本)
    <!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。  -->
    <!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
    <!-- 具体来说是由父工程的dependencyManagement来决定。 -->
    <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></dependency>
    </dependencies>
    

在这里插入图片描述

2. Maven工程聚合关系

2.1 聚合概念

Maven 聚合是指将多个项目组织到一个父级项目中,以便一起构建和管理的机制。聚合可以帮助我们更好地管理一组相关的子项目,同时简化它们的构建和部署过程。

2.2 聚合作用

  1. 管理多个子项目:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
  2. 构建和发布一组相关的项目:通过聚合,可以在一个命令中构建和发布多个相关的项目,简化了部署和维护工作。
  3. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。
  4. 统一管理依赖项:通过聚合,可以在父项目中管理公共依赖项和插件,避免重复定义。
  5. 聚合语法

父项目中包含的子项目列表(对 modules 标签进行标记,实际上在创建子工程的时候,会自动生成 module 标签的内容)

<project><groupId>com.example</groupId><artifactId>parent-project</artifactId><packaging>pom</packaging><version>1.0.0</version><modules><module>child-project1</module> <!-- 这中间是工程的路径,而不是工程名--><module>child-project2</module></modules>
</project>

2.4 聚合演示

通过触发父工程构建命令、引发所有子模块构建!产生反应堆!

当对父工程进行操作时,子工程会进行同样的操作,比如 clean 父工程,子工程也 clean
在这里插入图片描述

父工程进行 package 操作,子工程也进行了 package 打包
在这里插入图片描述

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

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

相关文章

初识 JVM

什么是JVM JVM 全称是 J ava V irtual M achine&#xff0c;中文译名 Java虚拟机 。 JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行 Java字节码文件 。 JVM的功能 Java语言如果不做任何优化&#xff0c;性能不如C、C等语言。 Java需要实时解释&…

什么是网络安全?网络安全概况

网络安全涉及保护我们的计算机网络、设备和数据免受未经授权的访问或破坏。 这个领域包括多种技术、过程和控制措施&#xff0c;旨在保护网络、设备和数据免受攻击、损害或未授权访问。网络安全涉及多个方面&#xff0c;包括但不限于信息安全、应用程序安全、操作系统安全等 …

仓储管理系统——软件工程报告(详细设计)④

详细设计 一、系统功能模块的划分 根据系统的功能性需求&#xff0c;本文将部队仓库管理系统分为以下六大模块&#xff1a;系统管理模 块、基础数据模块、出入库管理模块、库存管理模块、仓库信息管理模块、作业管理模 块&#xff0c;每个模块内部又分为很多小功能模块&#…

ADC的工作原理总结

ADC和DAC是联系连续和离散的重要桥梁&#xff0c;是信号采集和处理的重要环节。 这里我们先认识下ADC&#xff0c;聊一聊ADC的工作原理。 信号为何要相互转换&#xff1f; 模拟信号和数字信号的特点 自然界中大多数都是连续的模拟信号&#xff0c;模拟信号容易受到干扰&#…

华为AC+FIT AP组网配置

AC配置 vlan batch 100 to 101dhcp enableip pool apgateway-list 192.168.100.254 network 192.168.100.0 mask 255.255.255.0 interface Vlanif100ip address 192.168.100.254 255.255.255.0dhcp select globalinterface GigabitEthernet0/0/1port link-type trunkport trun…

Pixelmator Pro Mac版 v3.5 图像处理软件 兼容 M1/M2

在当今数字化时代&#xff0c;图像编辑软件成为了许多人必备的工具之一。无论您是摄影师、设计师还是普通用户&#xff0c;您都需要一款功能强大、易于使用的图像编辑软件来处理和优化您的照片和图像。而Pixelmator Pro for Mac正是满足这一需求的理想选择。 Pixelmator Pro f…

gradle构建spring-framework源码

5.3.22版本构建 通过启动的jvm参数配置代理下载 Could not download jruby-stdlib-9.2.20.1.jar (org.jruby:jruby-stdlib:9.2.20.1) Could not get resource https://repo.maven.apache.org/maven2/org/jruby/jruby-stdlib/9.2.20.1/jruby-stdlib-9.2.20.1.jar. Could not GE…

python+PyQt5 网口功能测试

UI界面&#xff1a; 源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file NetOpeningWinFrm.ui # # Created by: PyQt5 UI code generator 5.15.2 # # WARNING: Any manual changes made to this file will be lost when pyuic5…

springcloud alibaba sentinel熔断降级

简介 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 sentinel相当于hystrix的升级版&#xff0c;加入了web界面&#xff0c;能够实时在线的改变流…

Spring Security 之 用户名/密码认证

用户名/密码 验证用户身份的最常见方式之一是验证用户名和密码。Spring Security提供了全面的支持,用于使用用户名和密码进行身份验证。 您可以使用以下方式配置用户名和密码身份验证: @Configuration @EnableWebSecurity public class SecurityConfig {@Beanpublic Secur…

Excel象限图

Excel象限图 1、背景描述2、象限图&#xff08;散点图&#xff09;3、象限图&#xff08;气泡图&#xff09; 1、背景描述 平常我们在工作中做图表时&#xff0c;使用最多的就是柱状形、折线图、饼图&#xff0c;这些图表主要为了展示趋势、对比和构成&#xff0c;但有时候我们…