Maven继承

news2024/12/24 21:43:27

Maven 在设计时,借鉴了 Java 面向对象中的继承思想,提出了 POM 继承思想。

当一个项目包含多个模块时,可以在该项目中再创建一个父模块,并在其 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。对于父模块而言,其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 pom。

如下图,一个项目中存在如下多个模块。
 

如上图所示:

  • App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。
  • Root 是 App-Core-lib 和 App-Data-lib 的父模块。
  • Root 在它的依赖部分定义了 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 作为其依赖。

 App-UI-WAR 的 pom.xml 配置如下

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>App-UI-WAR</artifactId>
    <version>1.0</version>
    <dependencies>
        <!-- 依赖 App-Core-lib-->
        <dependency>
            <groupId>net.biancheng.www</groupId>
            <artifactId>App-Core-lib</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- 依赖 App-Data-lib-->
        <dependency>
            <groupId>net.biancheng.www</groupId>
            <artifactId>App-Data-lib</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

父模块 Root 的 pom.xml 配置如下。 

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>Root</artifactId>
    <version>1.0</version>
    <!--定义的父类 POM 打包类型使pom  -->
    <packaging>pom</packaging>
   
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</project>

在父模块 Root 的 pom.xml 中,其打包类型(packaging)为 pom,并声明了 3 个依赖:junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 。

子模块App-Core-lib 的 pom.xml 配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>App-Core-lib</artifactId>
    <version>1.0</version>
    <parent>
        <groupId>net.biancheng.www</groupId>
        <artifactId>Root</artifactId>
        <version>1.0</version>
        <relativePath>../Root</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
</project>

子模块App-Data-lib 的 pom.xml 配置如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>App-Data-lib</artifactId>
    <version>1.0</version>
    <parent>
        <groupId>net.biancheng.www</groupId>
        <artifactId>Root</artifactId>
        <version>1.0</version>
        <!-- <relativePath>../Root</relativePath> -->
    </parent>
</project>

在子模块 App-Core-lib 和 App-Data-lib 的 pom.xml 中,使用 parent 元素声明父模块,其子元素如下表:

元素描述是否必需
groupId父模块的项目组 id。
artifactId父模块 id。
version父模块版本。
relativePath父模块 POM 的相对路径,默认值为 ../pom.xml。
项目构建时,Maven 会先根据 relativePath 查找父模块 POM,如果找不到,再从本地仓库或远程仓库中查找。

子模块的 POM 中,当前模块的 groupId 和 version 元素可以省略,但这并不意味着当前模块没有 groupId 和 version,子模块会隐式的从父模块中继承这两个元素,即由父模块控制子模块的公司组织 id 以及版本,这样可以简化 POM 的配置。 

可继承的 POM 元素

在上面的例子中,我们可以看出 groupId、version 以及项目的依赖配置 dependencies 是可以被继承的,除了这 3 个元素之外,还有哪些元素可以被继承呢?

Maven 可通过继承获得 POM 元素,如下表。
 

元素描述
groupId项目组 ID,项目坐标的核心元素
version项目版本,项目坐标的核心元素
description项目的描述信息
organization项目的组织信息
inceptionYear项目的创始年份
url项目的URL地址
developers项目的开发者信息
contributors项目的贡献者信息
distributionManagement项目的部署配置
issueManagement项目的缺陷跟踪系统信息
ciManagement项目的持续集成系统信息
scm项目的版本控制系统信息
mailingLists项目的邮件列表信息
properties自定义的Maven属性
dependencies项目的依赖配置
dependencyManagement项目的依赖管理配置
repositories项目的仓库配置
build包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等
reporting包括项目的报告输出目录配置、报告插件配置等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序自定义导航栏

微信小程序自定义导航栏 业务需求&#xff1a; 点击小房子进行跳转指定的页面 、更改小房子的样式、或者是自定义导航栏 首先我们需要找到pages.json这个文件 如果是原生的微信小程序文件名字是 app.json其实就是找到配置路由的文件在代码里面添加属性"navigationStyle&qu…

java设计模式(十四)模板方法

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 模板方法模式(Template Method Pattern)&#xff0c;又叫模板模式(Template Pattern)&#xff0c; 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的…

1. Hadoop 入门

1. Hadoop 入门 1. 大数据概述 1. 大数据相关说明 大数据由来&#xff1a; 传统数据处理应用软件不足以处理&#xff08;存储和计算&#xff09;它们大而复杂的数据集 大数据面临的两大问题&#xff1a; 针对海量数据的 存储、计算 大数据的特性&#xff1a;容量大、种类多…

VFP使用BLOB字段存取图片到SQL2000,显示出来也EASY

首先来看一下BLOB这个数据类型的介绍&#xff1a; 大二进制对象(Blob)数据类型&#xff0c;若要存储一个任何种类的二进制数据&#xff0c;如 ASCII 码文本、一个可执行文件(.exe) 或一个带有不确定长度的字节字符串&#xff0c;可使用大二进制对象数据类型。对于从 SQL Serve…

c++11 标准模板(STL)(std::bitset)(六)

定义于头文件 <bitset> template< std::size_t N > class bitset; 类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集&#xff0c;并将它与字符串和整数相互转换。 bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssign…

港科夜闻|海南省教育厅党委书记曹献坤到访香港科大(广州)开展实地调研

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、海南省教育厅党委书记曹献坤到访香港科大(广州)开展实地调研。香港科大(广州)临时党委书记屈哨兵从政治建设、思想建设、组织建设、制度建设及工作机制等方面&#xff0c;为曹献坤书记详细介绍了学校的党建工作体系构建&…

C盘爆了怎么办

一、删除大文件 关闭hiberfil.sys功能 关闭hiberfil.sys功能&#xff08;系统休眠时才会用到&#xff09; 管理员身份运行cmd 输入如下命令 powercfg.exe -h off移动pagefile.sys 这是虚拟内存文件,不建议删除&#xff0c;可以移动 右击此电脑->属性->高级系统设置 …

被吐槽,苹果挤牙膏式发布会,跟微信产品迭代如出一辙

大家好&#xff0c;我是校长。 今天一大早醒来&#xff0c;苹果发布会&#xff0c;毫无意外&#xff0c;在 iOS 系统更新迭代方面&#xff0c;可谓是乏善可陈&#xff0c;毫无新意。 当然了&#xff0c;被吐槽也就在情理之中了。 很多人说 iOS17 的最大变化&#xff0c;就是没有…

ISO21434 产品开发网络安全(七)

目录 一、概述 二、目标 三、输入 3.1 先决条件 3.2 进一步支持信息 四、要求和建议 4.1 设计 4.2 集成和验证 五、输出 一、概述 本条款描述了网络安全要求和架构设计的规范&#xff08;章节10.4.1&#xff09;。 此外&#xff0c;本子句还描述了集成和验证活动&…

Yakit: 集成化单兵安全能力平台使用教程·反连管理篇

Yakit: 集成化单兵安全能力平台使用教程反连管理篇 1.端口监听器2.DNSlog3.反连服务器4.ICMP-Sizelog5.TCP-Portlog6.Yso-Java Hack1.端口监听器 反弹 Shell 的接收工具,利用端口监听器可以在服务器上开启一个端口,进行监听,并进行交互 输入想要监听的端口,点击监听该端口…

直播抽奖功能(互动功能接收端JS-SDK)

功能概述 本模块主要用于处理抽奖相关的逻辑&#xff0c;可以对抽奖开始和抽奖结束等事件进行监听以及提交观众中奖信息&#xff0c;接入方可以根据这些事件流程定制自己的UI界面。 抽奖--效果截图 抽奖--效果截图 初始化及销毁 在实例化该模块并进行使用之前&#xff0c;需要…

Shell脚本:for循环

shell脚本-for循环 一、for循环&#xff1a;1.格式&#xff1a;2.实操&#xff1a;3.类c语言&#xff1a; 一、for循环&#xff1a; 1.格式&#xff1a; &#xff08;1&#xff09;for 已知的循环次数场景 for 变量名 in 【 名称范围 】 do 命令序列&#xff08;执行内容&…

Vue+springboot美发美容化妆品产品商城系统

不同的游客可以注册成为用户&#xff0c;然后可以查看&#xff0c;搜索自己想买的美发产品&#xff0c;加入购物车&#xff0c;下订单&#xff0c;收货&#xff0c;确认付款等购物流程。前台和后台的分析使得该系统结构清晰&#xff0c;即包含管理员和用户两个最基本的实体&…

C++递推基本概念和基础知识

目录 一、递推的概念 什么是递推算法&#xff1f; 解决递推问题的一般形式 二、递推和递归的区别 三、递推的实例 一、递推的概念 什么是递推算法&#xff1f; “递推”是计算机解题的一种常用方法。利用“递推法”解题首先要分析归纳出“递推关系”。如经典的斐波那契数…

MIT 6.824 lab distributed system 分布式系统(1)----lab1 MapReduce

https://youtu.be/cQP8WApzIQQ 概念 为什么需要分布式系统&#xff1f; high performanceparallelism&#xff1a;分布式系统可以实现CPU、内存、硬盘的并行运行fault tolerancephysical&#xff1a;security / isolated 分布式系统的困难 concurrency&#xff1a;各个并行的…

【观察】金融行业决策智能化“换挡提速” 华为全球智慧金融峰会2023值得期待...

当前以数字化、智能化为特征的第四次工业革命正“扑面而来”&#xff0c;数字经济浪潮对各行各业都产生着深刻影响。其中&#xff0c;金融行业作为现代经济的核心&#xff0c;也面临着一系列重大的挑战和机遇。 相比于其他企业&#xff0c;金融行业依靠数据分析和智能决策更好地…

某公司招了一个大专生,候选人要一万月薪,HR给申请一万二,HR领导说:给一万三!...

无良公司看多了&#xff0c;不禁让人怀疑&#xff1a;这个世界上还有好公司和好hr吗&#xff1f; 来看看这位hr的故事&#xff1a; 最近我们招了一个大专生&#xff0c;5年经验。他的工资是7000&#xff0c;候选人想要10000&#xff0c;我给申请了12000&#xff0c;结果审批不通…

用于分析脉冲类信号的二阶瞬态提取变换研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【TCP/IP】基于TCP的服务器端/客户端 II - 迭代服务器/客户端的概念与实现

1. 迭代服务器端/客户端 1.1 迭代服务器实现 1.2 迭代回声服务器端/客户端 2 回声客户端存在的缺陷 1. 迭代服务器端/客户端 在此之前&#xff0c;让我们先补充一个“回声服务器/客户端”的概念。回声&#xff08;echo&#xff09;服务器/客户端是指服务器端将客户端传输的字…

干货 | 郭晓雷:数智安全监管机制研究与思考

作者&#xff1a;郭晓雷本文约4300字&#xff0c;建议阅读8分钟 本文报告的主要内容关于数据安全&#xff0c;从学术或者技术的角度&#xff0c;更多地认为人工智能是数据处理的新技术&#xff0c;其应用会产生更加丰富的数据处理活动场景。 郭晓雷&#xff1a;今天报告的主要内…