Maven排除依赖和可选依赖的使用方法

 更新时间:2023年06月06日 11:07:32   作者:小日子呀  
我们知道Maven依赖具有传递性,例如A依赖于B,B依赖于C,在不考虑依赖范围等因素的情况下,Maven会根据依赖传递机制,将间接依赖C 引入到A中,但如果A出于某种原因,希望将间接依赖C排除,那该怎么办呢,Maven为用户提供了两种解决方式排出和可选

排除依赖

假设存在这样的依赖关系,A 依赖于 B,B 依赖于 X,B 又依赖于 Y。B 实现了两个特性,其中一个特性依赖于 X,另一个特性依赖于 Y,且两个特性是互斥的关系,用户无法同时使用两个特性,所以 A 需要排除 X,此时就可以在 A 中将间接依赖 X 排除。

排除依赖是通过在 A 中使用 exclusions 元素实现的,该元素下可以包含若干个 exclusion 子元素,用于排除若干个间接依赖,示例代码如下。

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>net.biancheng.www</groupId>
            <artifactId>B</artifactId>
            <version>1.0-SNAPSHOT</version>
            <exclusions>
                <!-- 设置排除 -->
                <!-- 排除依赖必须基于直接依赖中的间接依赖设置为可以依赖为 false -->
                <!-- 设置当前依赖中是否使用间接依赖 -->
                <exclusion>
                    <!--设置具体排除-->
                    <groupId>net.biancheng.www</groupId>
                    <artifactId>X</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

关于 exclusions 元素及排除依赖说明如下:

  • 排除依赖是控制当前项目是否使用其直接依赖传递下来的接间依赖;
  • exclusions 元素下可以包含若干个 exclusion 子元素,用于排除若干个间接依赖;
  • exclusion 元素用来设置具体排除的间接依赖,该元素包含两个子元素:groupId 和 artifactId,用来确定需要排除的间接依赖的坐标信息;
  • exclusion 元素中只需要设置 groupId 和 artifactId 就可以确定需要排除的依赖,无需指定版本 version。

可选依赖

与上文的应用场景相同,也是 A 希望排除间接依赖 X,我们还可以在 B 中将 X 设置为可选依赖。

设置可选依赖

在 B 的 POM 关于 X 的依赖声明中使用 optional 元素,将其设置成可选依赖,示例配置如下。

<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.biancheng.www</groupId>
    <artifactId>B</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>net.biancheng.www</groupId>
            <artifactId>X</artifactId>
            <version>1.0-SNAPSHOT</version>
            <!--设置可选依赖  -->
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

关于 optional 元素及可选依赖说明如下:

  • 可选依赖用来控制当前依赖是否向下传递成为间接依赖;
  • optional 默认值为 false,表示可以向下传递称为间接依赖;
  • 若 optional 元素取值为 true,则表示当前依赖不能向下传递成为间接依赖。

排除依赖 VS 可选依赖 

排除依赖和可选依赖都能在项目中将间接依赖排除在外,但两者实现机制却完全不一样。

  • 排除依赖是控制当前项目是否使用其直接依赖传递下来的接间依赖;
  • 可选依赖是控制当前项目的依赖是否向下传递;
  • 可选依赖的优先级高于排除依赖;
  • 若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置,那么可选依赖的取值必须为 false,否则排除依赖无法生效。

到此这篇关于Maven排除依赖和可选依赖的使用方法的文章就介绍到这了,更多相关Maven排除依赖和可选依赖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 算法 6种排序小结

    java 算法 6种排序小结

    这篇文章主要介绍了java 算法 6种排序,排序原理及实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • Java生成10个1000以内的随机数并用消息框显示数组内容然后求和输出

    Java生成10个1000以内的随机数并用消息框显示数组内容然后求和输出

    这篇文章主要介绍了Java生成10个1000以内的随机数并用消息框显示数组内容然后求和输出,需要的朋友可以参考下
    2015-10-10
  • Spring入门配置和DL依赖注入实现图解

    Spring入门配置和DL依赖注入实现图解

    这篇文章主要介绍了Spring入门配置和DL依赖注入实现图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java实现计算器模板及源码

    java实现计算器模板及源码

    这篇文章主要为大家详细介绍了java实现计算器模板及源码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 一文带你搞懂Java中i++ 和 ++i的区别

    一文带你搞懂Java中i++ 和 ++i的区别

    在Java中,i++和++i都用于递增变量i的值,但它们之间有一个细微的区别,i++是后缀递增操作符,++i是前缀递增操作符,在大多数情况下,这两种递增操作的结果都是一样的,但在某些特定的表达式和逻辑中,它们可能会产生不同的效果,本文将带大家搞清Java中i++ 和 ++i的区别
    2023-09-09
  • java自定义异常打印内容详解

    java自定义异常打印内容详解

    这篇文章主要为大家详细介绍了java自定义异常打印内容的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • SpringCache常用注解及key中参数值为null问题解析

    SpringCache常用注解及key中参数值为null问题解析

    这篇文章主要介绍了SpringCache常用注解及key中参数值为null的问题解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot时区问题解决以及彻底解决时差问题

    SpringBoot时区问题解决以及彻底解决时差问题

    这篇文章主要给大家介绍了关于SpringBoot时区问题解决以及彻底解决时差问题的相关资料,spring boot作为微服务简易架构,拥有其自身的特点,快速搭建架构,简单快捷,需要的朋友可以参考下
    2023-08-08
  • MyBatis中基于别名typeAliases的设置

    MyBatis中基于别名typeAliases的设置

    这篇文章主要介绍了MyBatis中基于别名typeAliases的设置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 基于eclipse.ini内存设置的问题详解

    基于eclipse.ini内存设置的问题详解

    本篇文章是对eclipse.ini内存设置的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论