maven的继承

本文介绍了Maven的继承机制,包括两种文件目录形式、直接继承与显式继承的实现方式,以及如何处理版本冲突和依赖机制。通过使用parent标签,可以统一管理多个module的依赖版本,避免install操作。同时,Maven的properties元素允许设置属性,dependencyManagement用于管理依赖版本,解决版本冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用

统一多个maven module的依赖的版本号

文件目录

形式一

将多个maven module分开放:

  • total project
    • parent module
    • second level one
    • second level two
    • third level

就是说多个maven 的项目我们就随便放,在pom.xml里面我们需要做以下修改:

    <parent>
        <artifactId>parent-module</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../parent-module/pom.xml</relativePath>
    </parent>

有个parent标签,表示我们的父maven是parent-modulerelativePath就是父项目的pom.xml文件的相对路径
如果有了relativePath,那么就会在local repo 和remote repo之前先去搜寻这个relativePath,那么我们就不需要先install了

形式二

将多个maven module按照父子关系放:

  • total project
    • parent module
      • second level one
        • third level
      • second level two

就是说将子项目放到父项目里面
这样子我们不需要relativePath了。

实现

直接继承

在父项目中,我们有

    <dependencies>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
        </dependency>
    </dependencies>

那么子项目会完全继承这些依赖

如果我们不想给所有的子项目都继承父项目的所有依赖,我们不要直接写dependencies标签

显式继承

我们可以在dependencies外添加dependencyManagement

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.6.9</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
                <version>5.0.0.Alpha2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

dependencyManagement里面的依赖,子项目不会直接继承,只有在子项目添加这些依赖的时候,才会继承和父项目相同版本的依赖:

 <!--子项目-->
    <dependencies>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
    </dependencies>

这个子项目就会添加5.0.0Alpha2的netty-all,且没有dubbo
dependencyManagement外面的dependencies仍然会无条件继承

properties

一个标签,当然类似于xxx.properties这种文件
我们可以设置一些属性,然后通过${属性名}的方式去使用
比如我们设置version的时候,可以在properties标签中统一设置

    <properties>
        <spring-version>5.3.0</spring-version>
        <dubbo-version>2.6.9</dubbo-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>

    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo-version}</version>
            </dependency>
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
                <version>5.0.0.Alpha2</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

这个属性名当然随便取

版本冲突

如果我们有一个module1
他有两个依赖dep1dep2
其中dep1有依赖dep2,而且需要是很苛刻的version。
这时如果我们指定了不符合要求的version的dep2,那么这个dep1只能使用我们指定的不符合要求的dep2了,然后就会出错
我们可以使用mvn dependency:tree来检查我们的依赖问题

依赖机制(dependency mechanism)

maven为了不让我们手动的添加层级依赖,他会自动按照传递关系去添加其他的jar包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值