返回顶部
首页 > 资讯 > 后端开发 > Python >Maven继承与聚合详解及作用介绍
  • 390
分享到

Maven继承与聚合详解及作用介绍

2024-04-02 19:04:59 390人浏览 独家记忆

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

摘要

目录一、继承引言1. 继承关系的实现2. 依赖配置二、聚合引言实现聚合三、继承与聚合的合并一、继承 引言 继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父

一、继承

引言

继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父模块,父模块中指定哪个版本,子模块就继承哪个版本,可以有效避免不同模块可能采用不同版本的依赖时产生的冲突

1. 继承关系的实现

(1)parent 模块设置

parent 模块即父模块,由于父模块只是为了给子模块提供依赖,所以父模块中只需要一个 pom.xml 文件即可。父模块的打包方式必须设置为 pom(默认打包方式是 jar

    <groupId>com.mzz</groupId>
    <artifactId>parent-Maven</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 设置打包方式为 pom -->
    <packaging>pom</packaging>

只要设置了 packaging 属性为 pom,这个模块就可以作为 parent 模块被继承了

(2)子模块设置

子模块中只要设置了 parent 标签,就可以建立继承关系。

所以继承主要体现在子模块,parent 模块是感受不到继承关系的,也无法从 parent 模块中看出哪些模块继承了自己。

另外继承关系建议以后,如果子模块与父模块处于同一 groupId 下,那么子模块可以不写 groupId

    <!--<groupId>com.mzz</groupId>-->
    <artifactId>project-dao</artifactId>
    <version>1.0-SNAPSHOT</version>
	<parent>
		<!-- parent 模块的坐标与版本 -->
		<groupId>com.mzz</groupId>
		<artifactId>parent-maven</artifactId>
		<version>1.0-SNAPSHOT</version>
		<!-- parent 模块的相对路径 -->
		<relativePath>../parent-maven/pom.xml</relativePath>
	</parent>

对 relativePath 属性做一些补充:

  • relativePath 可以省略,前提是 parent 模块已经 install 至仓库,否则子模块无法定位到 parent,不能通过编译
  • 相对路径最后可以不写 pom.xml,只定位到父模块的文件夹也可以

2. 依赖配置

(1)必须继承的依赖

parent 模块中声明的依赖便是子模块必须继承的依赖,子模块中不必声明便从父模块中继承了这些依赖

<dependencies>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-WEBmvc</artifactId>
		<version>5.2.20.RELEASE</version>
	</dependency>
	<!-- 省略了其他依赖的声明 -->
	<dependency>
		<groupId>javax.servlet</groupId>
		<artifactId>javax.servlet-api</artifactId>
		<version>4.0.1</version>
		<scope>provided</scope>		<!-- scope 属性也会被继承 -->
	</dependency>
<dependencies>

如上图,可见子模块中未声明依赖就继承了 parent 中的所有依赖

(2)有选择地继承依赖

parent 模块中设置依赖管理 dependencyManagement 后,在其中声明的依赖就是供子模块选择的依赖。子模块需要哪些依赖,必须在子模块中声明依赖,但不需要注明 version,因为版本由 parent 来指定。

<!-- parent 模块 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.10.RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<!-- 子模块声明依赖 -->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
    </dependency>
</dependencies>

如果子模块声明的依赖有 version 属性,那么这个依赖并不继承自 parent

另外,parent 模块声明在 dependencyManagement 中的依赖并不被 parent 模块所依赖

(3)插件继承

插件的继承规则和设置方法与前面的依赖极为相似,同样也有插件管理 pluginManagement,与 dependencyManagement 类似,这里给出一个 parent 中设置的样例模板

<build>
    <plugins>
		<!-- 声明必须继承的插件 -->
    </plugins>
    <pluginManagement>
        <plugins>
			<!-- 声明可供选择是否继承的插件 -->
        </plugins>
    </pluginManagement>
</build>

二、聚合

引言

聚合就是指将多个模块组织成一个整体,同时进行项目的构建工作。

使用聚合可以避免分模块开发时的一些问题,比如某个模块更新了一些内容,但其它已经构建好的模块不会进行更新,将所有模块聚合之后,只对聚合模块进行构建就会对所有模块都进行构建,能够及时的发现问题

实现聚合

聚合模块也被称为 root 模块,同样是一个只需要 pom.xml 文件的项目,只要设置了 modules 标签,再将聚合的模块添加进去,即可实现聚合

<modules>
	<!-- module 属性中写明被聚合模块的相对路径 -->
	<module>../project-pojo</module>
	<module>../project-dao</module>
	<module>../project-service</module>
</modules>

如上例,将 pojo,dao 和 service 三个模块进行了聚合,只要对聚合模块进行构建,这三个模块也会被一起构建

聚合只体现在聚合模块,被聚合的模块也无法感知自身被谁所聚合

三、继承与聚合的合并

继承是的 parent 模块和聚合时的 root 模块都只有 pom.xml,因为他们都是设计型模块,不包含实际的模块内容。事实上,继承与聚合经常被合并在一起使用,父模块(parent)也作为聚合模块(root)使用,只需要在父模块中加入 modules 属性,将子模块聚合即可

这时要说一说继承时说到的 relativePath 属性,前面说 relativePath 属性可以省略,前提是父模块已经构建并 install 至仓库,否则子模块无法构建,但此时父模块同时也聚合了子模块,要构建父模块就又要一起构建子模块,但构建子模块又需要父模块 install 至仓库……陷入了套娃问题

此时构建父模块 maven 会报错: Non-resolvable parent POM for XXX.XXX.XXX Could not find artifact com.mzz:parent-maven:pom:1.0-SNAPSHOT and ‘parent.relativePath’ points at wrong local POM,原因是无法定位 parent 模块

解决方法也很简单,要么老老实实在子模块中 parent 标签中加入 relativePath 属性,使 maven

可以根据相对路径找到父模块,要么,先将父模块中的 modules 注释掉,暂时不做聚合,将父模块 install 之后再取消注释,然后就能一起构建啦

到此这篇关于Maven继承与聚合详解及作用介绍的文章就介绍到这了,更多相关Maven 继承 聚合内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Maven继承与聚合详解及作用介绍

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

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

猜你喜欢
  • Maven继承与聚合详解及作用介绍
    目录一、继承引言1. 继承关系的实现2. 依赖配置二、聚合引言实现聚合三、继承与聚合的合并一、继承 引言 继承关系可以对不同模块的依赖版本做统一管理,因为子模块中的依赖基本都继承于父...
    99+
    2024-04-02
  • 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聚合
  • C++中继承(inheritance)详解及其作用介绍
    概述 面向对象程序设计中最重要的一个概念是继承 (inheritance). 继承允许我们依据另一个类来定义一个类, 这使得创建和维护一个应用程序变得更统一. 这样做也达到了重用代码...
    99+
    2024-04-02
  • Maven的继承与聚合实例分析
    这篇文章主要介绍“Maven的继承与聚合实例分析”,在日常操作中,相信很多人在Maven的继承与聚合实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Maven的继承与聚合实例分析”的疑惑有所帮助!接下来...
    99+
    2023-07-02
  • 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
  • C/C++中多重继承详解及其作用介绍
    目录概述优缺点优点缺点声明多重继承的方法格式例子二义性两个基类有同名成员基类和派生类有同名成员两个基类从同一个基类派生概述 多重继承 (multiple inheritance): ...
    99+
    2024-04-02
  • 一文带你搞懂Maven的继承与聚合
    目录一、继承二、继承关系实施步骤三、聚合与继承的区别一、继承 我们已经完成了使用聚合工程去管理项目,聚合工程进行某一个构建操作,其他被其管理的项目也会 执行相同的构建操作。那么接下来...
    99+
    2024-04-02
  • 一篇文章带你了解Maven的继承和聚合
    目录1、继承2、聚合总结1、继承 需求场景: 有三个 Maven 工程,每个工程都依赖某个 jar 包,比如 Junit,由于 test 范围的依赖不能传递,它必然会分散在每个工程中...
    99+
    2024-04-02
  • Python类的继承与多态详细介绍
    目录概念类的创建类的继承多态的使用概念 类(Class): 用来描述具有相同的属性和方法的对象的集合。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类...
    99+
    2024-04-02
  • KVM 介绍及作用详解
    目录一、虚拟化1、背景2、虚拟化技术介绍3、虚拟化技术发展4、虚拟化类型5、虚拟化的特性特性:二、KVM概述1、KVM简介2、KVM的作用3、KVM 虚拟化架构/三种模式4、KVM核...
    99+
    2024-04-02
  • C/C++中组合详解及其作用介绍
    目录概述案例总结概述 组合 (Composition) 指在一个类中另一类的对象作为数据成员. 案例 在平面上两点连成一条直线, 求直线的长度和直线中点的坐标. 要求: ...
    99+
    2024-04-02
  • 详解C++中单继承与多继承的使用
    目录前言1.继承的概念和定义(1)继承的概念(2)继承的定义方法(2)继承后子类的成员类型2.基类与派生类的赋值转换(1)派生类赋值给基类(2)基类给派生类3.继承中的作用域(1)隐...
    99+
    2024-04-02
  • C++中多重继承问题及解决方法的介绍
    C++中多重继承问题及解决方法的介绍在C++中,多重继承是一种强大的特性,允许一个类从多个父类派生而来。然而,多重继承也带来了一些问题和挑战,其中最常见的问题是菱形继承问题(Diamond Inheritance Problem)。菱形继承...
    99+
    2023-10-22
    解决方法 (Solutions) 多重继承 (Multiple Inheritance) 问题 (Issues)
  • Maven使用方法详及方式详细介绍
    目录Maven简介1、软件开发中的阶段2、Maven能做什么3、没有使用maven怎么管理依赖4、什么是maven约定目录结构maven的使用方式POM文件坐标的概念依赖 depen...
    99+
    2022-11-13
    Maven使用方法 Maven方法 Maven使用方式
  • C++对象与继承使用中一些问题介绍
    目录定义抽象类类的继承使用new关键字实例化对象,只能用指针变量来接收使用普通的对象属性及方法时使用.来引用,但是用指针表示的对象则使用->定义类的时候,属性需要赋初始值的请况...
    99+
    2024-04-02
  • C++中对象与类的详解及其作用介绍
    目录什么是对象面向过程 vs 面向对象面向过程面向对象什么是类类的格式类的成员函数函数访问权限方法一方法二方法三inline 成员函数什么是对象 任何事物都是一个对象, 也就是传说中...
    99+
    2024-04-02
  • maven多模块项目依赖管理与依赖继承详解
    目录maven多模块项目依赖管理与依赖继承1、指定父模块与默认继承2、依赖管理关于maven项目依赖继承问题需要在父项目中加入把父项目已POM的形式在子项目中以<parent&...
    99+
    2024-04-02
  • C++中继承与组合的区别详细解析
    C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”。我们要给“继承”立一些使用规则: 一、如果类A 和类B 毫不相关,不可以为了使B 的...
    99+
    2022-11-15
    继承 组合
  • C++模板Template详解及其作用介绍
    目录1. 模板2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板原理2.4 函数模板的实例化2.5 模板参数的匹配原则2.6声明定义分离3. 类模板3.1 类模板...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作