当前位置: 首页 > news >正文

【Java基础】Maven继承

1. 前言

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

2. Maven继承

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

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

在这里插入图片描述
如上图所示:

  • 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.wangzhe.www</groupId><artifactId>App-UI-WAR</artifactId><version>1.0</version><dependencies><!-- 依赖 App-Core-lib--><dependency><groupId>net.wangzhe.www</groupId><artifactId>App-Core-lib</artifactId><version>1.0</version></dependency><!-- 依赖 App-Data-lib--><dependency><groupId>net.wangzhe.www</groupId><artifactId>App-Data-lib</artifactId><version>1.0</version></dependency></dependencies>
</project>

父模块 POM 配置

父模块 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.wangzhe.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 。

子模块 POM 配置

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.wangzhe.www</groupId><artifactId>App-Core-lib</artifactId><version>1.0</version><parent><groupId>net.wangzhe.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.wangzhe.www</groupId><artifactId>App-Data-lib</artifactId><version>1.0</version><parent><groupId>net.wangzhe.www</groupId><artifactId>Root</artifactId><version>1.0</version><!-- <relativePath>../Root</relativePath> --></parent>
</project>

App-Core-lib 有 5 个依赖项,其中 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 是从父模块 Root 中继承的;log4j 1.2.17 是该模块本身的 POM 中声明的;hamcrest 1.1 是 junit 4.9 传递下来的依赖项。

App-Data-lib 有 4 个依赖项,其中 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 是从父模块 Root 中继承的;hamcrest 1.1 是 junit 4.9 传递下来的依赖项。

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

http://www.lryc.cn/news/345510.html

相关文章:

  • java技术总结
  • C# WinForm —— 12 ListBox绑定数据
  • 自动驾驶主流芯片及平台架构(二)特斯拉自动驾驶芯片平台介绍
  • powershell@管道符过滤的顺序问题@powershell管道符如何工作
  • SMI接口
  • 【C++】转换构造函数和类型转换函数
  • 全栈开发之路——前端篇(5)组件间通讯和接口等知识补充
  • 4.【Orangepi Zero2】Linux定时器(signal、setitimer),软件PWM驱动舵机(SG90)
  • K8S哲学 - 资源调度 HPA (horizontal pod autoScaler-sync-period)
  • uniapp/微信小程序实现加入购物车点击添加飞到购物车动画
  • 电商大数据的采集||电商大数据关键技术【基于Python】
  • H264 SP帧等知识笔记
  • 流量印钞机:每日稳定收入1500+
  • Tomcat中服务启动失败,如何查看启动失败日志?
  • React19学习-初体验
  • 【UE5】数字人基础
  • OSTEP Projects:KV
  • JAVA学习笔记(第三周)
  • linux 内核驱动 -- reboot -f 导致内核死机 而 reboot则不会引起问题
  • 【vue-echarts】 报错问题解决 “Error: Component series.pie not exists. Load it first.“
  • MySQL慢查询SQL优化
  • 【嵌入式DIY实例】-DDS信号生成器
  • java设计模式四 桥接模式
  • 《Python编程从入门到实践》day24
  • 【hackmyvm】 Animetronic靶机
  • [附源码]石器时代_恐龙宝贝内购版_三网H5手游_带GM工具
  • RS2255XN功能和参数介绍及PDF资料
  • 设计模式——外观模式(Facade)
  • 【linux软件基础知识】Linux 中的普通进程的调度机制
  • keil5软件安装教程(MDKv5.39)