Maven【4】(继承)(命令行操作)

简介: Maven【4】(继承)(命令行操作)

【1】基础概念

说到继承,我们很容易想到Java中的继承,有子类和父类,子类继承父类,那么我们maven中的继承是什么呢?

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

A 工程:子工程

B 工程:父工程

本质上是 A 工程的 pom.xml 中的配置继承了 B 工程中 pom.xml 的配置,本质上是pom文件里的配置内容的继承。

【2】继承的作用

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

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

那为什么要这样设计呢?是因为:

1.在每一个 module 中各自维护各自的依赖信息很容易发生出入,不易统一管理。

2.使用同一个框架内的不同 jar 包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一。

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

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

【3】创建父工程和子工程

创建的命令和前面创建 pro01-maven-java 一样:

mvn archetype:generate

然后指定一下坐标:

我们工程创建好之后,要修改它的打包方式:

<groupId>com.atxiaoyu.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
  <packaging>pom</packaging>

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

创建完父工程后,我们再创建几个子工程(模块工程),需要进入 pro03-maven-parent 工程的根目录,然后运行 mvn archetype:generate 命令来创建模块工程。

我们这里创建三个子工程:

我们创建完后可以发现,父工程的pom.xml文件会自动的被修改:

然后我们打开子工程后会发现会自动配置父工程,parent就是给当前子工程指定父工程:(通过指定父工程的坐标找到父工程)

这里还要注意一点,如果子工程的groupId和version与父工程的一样,那么子工程的groupId和version就可以省略。(一般来说子工程的groupId和version与父工程的都是一样的)

【4】在父工程中统一管理依赖

省略groupId和version并不是我们的目的,我们的目的是让父工程管理我们依赖的版本

我们使用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>

然后我们可以在子工程中引用那些被父工程管理的依赖,子工程引用父工程中的依赖信息时,可以把版本号去掉,把版本号去掉就表示子工程中这个依赖的版本由父工程决定。

还要注意一点,就是在父工程中改变依赖信息的版本,子工程中也会跟着改变。

我们还可以在父工程中声明自定义属性,就像这样:

<!-- 通过自定义属性,统一指定Spring的版本 -->
<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  
  <!-- 自定义标签,维护Spring版本数据(标签的名字是我们自己定的,根据自己的需要,自己去设定标签的名字) -->
  <atxiaoyu.spring.version>4.3.6.RELEASE</atxiaoyu.spring.version>
</properties>

然后在使用${}的形式来引用自定义的属性名(依赖的版本就变成一个表达式了):

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

这样就真正实现了“一处修改,处处生效”。

目录
相关文章
|
6月前
|
Java Maven Spring
Maven高级-继承、实施步骤及聚合与继承的区别
Maven高级-继承、实施步骤及聚合与继承的区别
71 0
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
232 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
3月前
|
XML Java Maven
"Maven项目模块化大揭秘!掌握Model间最佳继承设计,让你的代码优雅如诗,项目维护不再愁!"
【8月更文挑战第11天】Maven是Java项目中常用的构建工具,其模块化特性对大型项目的管理至关重要。本文介绍Maven中的继承与聚合机制,指导如何通过继承消除重复配置,以及如何通过聚合统一构建多个模块。遵循单一职责原则,文章建议按功能划分模块,并提供了父POM与子POM的配置示例。此外,还讨论了适度模块化、依赖管理的原则,帮助提升项目的可维护性和扩展性。
48 4
|
3月前
|
设计模式 IDE Java
|
5月前
|
Java Maven
Maven命令行参数详解
Maven命令行参数详解
165 0
|
5月前
|
缓存 Java Maven
IDEA如何把MAVEN项目打包成jar包并且用命令行启动
IDEA如何把MAVEN项目打包成jar包并且用命令行启动
70 0
|
6月前
|
Java 项目管理 Maven
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
Maven的聚合和继承是Java开发中重要的概念。聚合允许将多个项目组合成一个构建单元,简化多模块项目的构建过程,提高构建效率。继承则让子项目重用父项目的配置和属性,避免了重复定义,增强了项目的一致性和可维护性。通过聚合和继承,Maven为多模块项目的构建和管理提供了高效且灵活的支持,减少了配置冗余,提升了开发效率。
120 0
【揭秘】Maven聚合与继承:如何轻松实现项目依赖管理?
|
6月前
|
Java Maven 开发者
Maven高级-聚合与继承 私服(图文并茂)
Maven高级-聚合与继承 私服(图文并茂)
65 0
|
6月前
|
Java Maven
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)
61 0
|
6月前
|
Java Maven
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
Maven【2】( Web 工程依赖 Java 工程)(命令行操作)
57 0