Maven项目管理工具:Maven排除依赖和可选依赖

杰米粉2021-10-08 14:29

    我们知道Maven依赖具有传递性,例如A依赖于B,B依赖于C,在不考虑依赖范围等因素的情况下,Maven会根据依赖传递机制,将间接依赖C引入到A中。但如果A出于某种原因,希望将间接依赖C排除,那该怎么办呢?Maven为用户提供了两种解决方式:排除依赖(DependencyExclusions)和可选依赖(OptionalDependencies)。

    排除依赖

    假设存在这样的依赖关系,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中设置可选依赖外,我们还可以在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教程频道。

Maven项目管理工具:Maven排除依赖和可选依赖

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营