iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Maven的使用之继承与聚合
  • 512
分享到

Maven的使用之继承与聚合

Maven的使用Maven继承与聚合Maven继承Maven聚合 2023-05-17 08:05:35 512人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、实验:继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父

一、实验:继承

1、概念

Maven工程之间,A 工程继承 B 工程

B 工程:父工程
A 工程:子工程
本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置。

2、作用

在父工程中统一管理项目中的依赖信息,具体来说是管理依赖信息的版本。

它的背景是:

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

它背后的需求是:

⭕ 在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。
⭕ 使用同一个框架内的不同 jar包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。

⭕ 使用框架时所需要的 jar包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。

通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

3、举例

在一个工程中依赖多个 spring 的 jar 包

TIP

使用 Spring 时要求所有 Spring 自己的 jar 包版本必须一致。为了能够对这些 jar 包的版本进行统一管理,我们使用继承这个机制,将所有版本信息统一在父工程中进行管理。

4、操作

4.1 创建父工程

创建的过程和前面创建 pro01-maven-java 一样。
工程名称:pro03-maven-parent工程创建好之后,要修改它的打包方式:

 <groupId>com.atguigu.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>

  <!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
  <packaging>pom</packaging>

只有打包方式为 pom 的 Maven 工程能够管理其他 Maven 工程。打包方式为 pom 的 Maven 工程中不写业务代码,它是专门管理其他 Maven 工程的工程

4.2 创建模块工程

模块工程类似于 idea 中的 module,所以需要进入 pro03-maven-parent 工程的根目录,然后运行 mvn archetype:generate 命令来创建模块工程。

假设,我们创建三个模块工程:

4.3 查看被添加新内容的父工程 pom.xml

下面 modules 和 module 标签是聚合功能的配置

<modules>  
	<module>pro04-maven-module</module>
	<module>pro05-maven-module</module>
	<module>pro06-maven-module</module>
</modules>

4.4 解读子工程的pom.xml

<!-- 使用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> -->

4.5 在父工程中配置依赖的统一管理

<!-- 使用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>

4.6 子工程中引用那些被父工程管理的依赖

关键点:省略版本号

<!-- 子工程引用父工程中的依赖信息时,可以把版本号去掉。	-->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的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>

4.7 在父工程中升级依赖信息的版本

        	<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-beans</artifactId>
				<version>4.1.4.RELEASE</version>
			</dependency>

然后在子工程中运行mvn dependency:list,效果如下:

TIP

4.8 在父工程中声明自定义属性

<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	
	<!-- 自定义标签,维护Spring版本数据 -->
	<atguigu.spring.version>4.3.6.RELEASE</atguigu.spring.version>
</properties>

在需要的地方使用${}的形式来引用自定义的属性名:

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

真正实现“一处修改,处处生效”。

5、实际意义

编写一套符合要求、开发各种功能都能正常工作的依赖组合并不容易。如果公司里已经有人总结了成熟的组合方案,那么再开发新项目时,如果不使用原有的积累,而是重新摸索,会浪费大量的时间。为了提高效率,我们可以使用工程继承的机制,让成熟的依赖组合方案能够保留下来。

如上图所示,公司级的父工程中管理的就是成熟的依赖组合方案,各个新项目、子系统各取所需即可。

二、实验:聚合

1、聚合本身的含义

部分组成整体

动画片《战神金刚》中的经典台词:“我来组成头部!我来组成手臂!”就是聚合关系最生动的体现。

2、Maven 中的聚合

使用一个“总工程”将各个“模块工程”汇集起来,作为一个整体对应完整的项目。
⭕ 项目:整体
⭕ 模块:部分

概念的对应关系:

⭕ 从继承关系角度来看:

父工程 子工程

⭕ 从聚合关系角度来看:

总工程 模块工程

3、好处

⭕ 一键执行 Maven 命令:很多构建命令都可以在“总工程”中一键执行。

以 mvn install 命令为例:Maven要求有父工程时先安装父工程;有依赖的工程时,先安装被依赖的工程。我们自己考虑这些规则会很麻烦。但是工程聚合之后,在总工程执行 mvn install 可以一键完成安装,而且会自动按照正确的顺序执行。

⭕ 配置聚合之后,各个模块工程会在总工程中展示一个列表,让项目中的各个模块一目了然。

4、聚合的配置

在总工程中配置 modules 即可:

<modules>  
		<module>pro04-maven-module</module>
		<module>pro05-maven-module</module>
		<module>pro06-maven-module</module>
	</modules>

5、依赖循环问题

如果 A 工程依赖 B 工程,B 工程依赖 C 工程,C 工程又反过来依赖 A 工程,那么在执行构建操作时会报下面的错误:

[ERROR] [ERROR] The projects in the Reactor contain a cyclic reference:

这个错误的含义是:循环引用。

以上就是Maven的使用之继承与聚合的详细内容,更多关于Maven继承与聚合的资料请关注编程网其它相关文章!

--结束END--

本文标题: Maven的使用之继承与聚合

本文链接: https://www.lsjlt.com/news/210823.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Maven的使用之继承与聚合
    目录一、实验:继承1、概念2、作用3、举例4、操作4.1 创建父工程4.2 创建模块工程4.3 查看被添加新内容的父工程 pom.xml4.4 解读子工程的pom.xml4.5 在父...
    99+
    2023-05-17
    Maven的使用 Maven继承与聚合 Maven继承 Maven聚合
  • Maven的继承与聚合实例分析
    这篇文章主要介绍“Maven的继承与聚合实例分析”,在日常操作中,相信很多人在Maven的继承与聚合实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Maven的继承与聚合实例分析”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • Maven继承与聚合详解及作用介绍
    目录一、继承引言1. 继承关系的实现2. 依赖配置二、聚合引言实现聚合三、继承与聚合的合并一、继承 引言 继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父...
    99+
    2024-04-02
  • 一文带你搞懂Maven的继承与聚合
    目录一、继承二、继承关系实施步骤三、聚合与继承的区别一、继承 我们已经完成了使用聚合工程去管理项目,聚合工程进行某一个构建操作,其他被其管理的项目也会 执行相同的构建操作。那么接下来...
    99+
    2024-04-02
  • 一篇文章带你了解Maven的继承和聚合
    目录1、继承2、聚合总结1、继承 需求场景: 有三个 Maven 工程,每个工程都依赖某个 jar 包,比如 Junit,由于 test 范围的依赖不能传递,它必然会分散在每个工程中...
    99+
    2024-04-02
  • java继承与聚合的区别有哪些
    Java中的继承和聚合都是实现代码重用的方式,但它们有一些区别。继承:1. 继承是通过创建一个类来继承另一个类的属性和方法。2. 子...
    99+
    2023-09-08
    java
  • Maven中dependency和plugins的继承与约束
    目录Maven的父子项目父项目配置子项目定义dependenciesdependencyManagementpluginManagement总结Maven的父子项目 父子项目核心点是...
    99+
    2022-12-19
    Maven中dependency继承 Maven中dependency约束 Maven中plugins继承 Maven中plugins约束
  • 详解C++中单继承与多继承的使用
    目录前言1.继承的概念和定义(1)继承的概念(2)继承的定义方法(2)继承后子类的成员类型2.基类与派生类的赋值转换(1)派生类赋值给基类(2)基类给派生类3.继承中的作用域(1)隐...
    99+
    2024-04-02
  • C++中单继承与多继承如何使用
    今天小编给大家分享一下C++中单继承与多继承如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言C++的继承机制相对其...
    99+
    2023-06-30
  • Maven分模块开发与依赖管理和聚合和继承及属性深入详细介绍
    目录前言分模块开发1.1 分模块开发理念1.按照功能拆分2.按照模块拆分1.2 分模块开发实现2.依赖管理2.1 依赖传递与冲突问题2.2 可选依赖和排除依赖3.聚合和继承 ...
    99+
    2022-11-13
    Maven分模块开发 Maven依赖管理 Maven聚合
  • C++数据结构继承的概念与菱形继承及虚拟继承和组合
    目录继承的概念继承的定义基类和派生类对象之间的赋值转换继承中的作用域派生类的默认成员函数继承中的两个小细节继承和友元继承和静态成员单继承和多继承(菱形继承)虚拟继承概念虚拟继承的原理...
    99+
    2024-04-02
  • Sass的@extend与继承如何使用
    本篇内容介绍了“Sass的@extend与继承如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SASS是便是一门动态样式语言,是一款款...
    99+
    2023-06-27
  • C++数据结构继承的概念与菱形继承及虚拟继承和组合分析
    这篇“C++数据结构继承的概念与菱形继承及虚拟继承和组合分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++数据结构继承...
    99+
    2023-06-29
  • java设计模式—静态代理模式(聚合与继承方式对比)
    一、概述目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换思路:(1)聚合:代理类聚合了被代理类,且代理类及被代理类都实现了movable接口,则可实现灵活多变,具体看代码(...
    99+
    2023-05-31
    java 静态代理模式 设计模式
  • CSS中层叠与继承的使用方法
    本篇内容介绍了“CSS中层叠与继承的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CSS技术理论:...
    99+
    2024-04-02
  • PHP 继承与多态,解构组合的艺术
    Ⅰ 继承 继承是面向对象编程中的一种关系,它允许一个类从另一个类继承属性和方法。子类能够继承父类的所有非私有成员,并且可以向父类添加新的成员或重写父类的方法。继承可以帮助程序员将代码组织成可重用且易于维护的模块,提高代码的可维护性和可扩...
    99+
    2024-02-14
    PHP 继承 多态 面向对象编程 代码重用 可维护性
  • Go语言使用组合的思想实现继承
    目录前言类型嵌入结构体类型嵌入接口类型嵌入小结前言 Go 语言的设计之初,就不打算支持面向对象的编程特性,因此 Go 不支持面向对象的三大特性之一——继承。但...
    99+
    2022-12-16
    Go语言继承 Go 继承
  • C++中的类扩展之继承和组合详解
    目录相关术语一、继承二、组合相关术语 继承:继承父类后可以拥有父类对应的属性和方法。 组合:将类作为成员对象,基类可以直接调用派生类对应的属性和方法。 一、继承 继承是指在一个已有的...
    99+
    2023-05-17
    C++类扩展 C++继承 C++组合
  • php继承的使用方法
    本篇内容主要讲解“php继承的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php继承的使用方法”吧!继承属于面向对象的三大机制中的一种。在C++,JAVA,PHP中都存在,下面为大家介...
    99+
    2023-06-17
  • Python的继承怎么使用
    本篇内容介绍了“Python的继承怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!面向对象三大特性:封装 根据 职责 将 属性 和 方...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作