maven中的继承

97 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

继承

概念

maven工程之间,若A工程继承B工程,则:

  • A工程--->子工程
  • B工程--->父工程

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

作用

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

它的背景是:

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

它背后的需求是:

  • 在每一个module中各自维护各自的依赖信息很容易发生出入,不易统一管理
  • 使用同一个框架的不同jar包(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合,这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索

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

简易说明:如果在父工程中指定了版本号信息,那么在子工程中配置坐标时就可将其省略。

操作

创建父工程:

  1. 创建的过程和此前创建pro01-maven-java一样,我们这里演示用的名字是pro03-maven-parent

  2. 工程创建好后,要修改它的打包方式:

    <packaging>pom</packaging>
    
  3. 只有打包方式为pom的maven工程能够管理其他maven工程。打包方式为pom的maven工程中不写业务代码,它是专门管理其他maven工程的工程

创建模块工程:

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

父工程pom.xml中的modules和module标签是聚合功能的标签

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

在子工程pom.xml中也会有parent标签来配置父工程,通过父工程的坐标找到父工程

在父工程中统一管理依赖信息:

<dependencyManagement>
    <denpendencies>
        <dependency>
            <!-- 在这里配置依赖信息(坐标) -->
        </dependency>
    </denpendencies>
</dependencyManagement>

注意:即使父工程配置了对依赖的管理,子工程需要使用具体哪一个依赖还是要明确配置,且对于已经在父工程进行了管理的依赖,子工程中引用时可以不写version,如果写上了,而且与父工程管理的version不一样,则会覆盖掉父工程管理的版本并最终采纳。

补充:配置自定义属性:

在properties标签中自定义一个标签,在标签内写版本号信息,将依赖管理中的version内容改为${标签名}来进行配置,这样就减少了冗余,易于后期维护