Maven排除依赖和可选依赖
2023-06-13 09:11:54 时间
我们知道 Maven 依赖具有传递性,例如 A 依赖于 B,B 依赖于 C,在不考虑依赖范围等因素的情况下,Maven 会根据依赖传递机制,将间接依赖 C 引入到 A 中。但如果 A 出于某种原因,希望将间接依赖 C 排除,那该怎么办呢?Maven 为用户提供了两种解决方式:排除依赖(Dependency Exclusions)和可选依赖(Optional Dependencies)。
exclusion 元素用来设置具体排除的间接依赖,该元素包含两个子元素:groupId 和 artifactId,用来确定需要排除的间接依赖的坐标信息; exclusion 元素中只需要设置 groupId 和 artifactId 就可以确定需要排除的依赖,无需指定版本 version。
排除依赖 VS 可选依赖
若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置,那么可选依赖的取值必须为 false,否则排除依赖无法生效。
假设存在这样的依赖关系,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 元素及排除依赖说明如下:
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 元素及可选依赖说明如下:
排除依赖 VS 可选依赖
排除依赖和可选依赖都能在项目中将间接依赖排除在外,但两者实现机制却完全不一样。
若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置,那么可选依赖的取值必须为 false,否则排除依赖无法生效。
相关文章
- idea设置默认maven路径_idea查看maven路径
- 【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包
- maven编译报错:java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags[通俗易懂]
- idea中了魔咒?maven依赖错误,如何破除?
- Maven–如何下载JSONObject相关依赖架包
- 固化的Maven依赖和嵌入式Servlet容器
- Maven 中依赖使用的版本号
- Maven中常用命令以及idea中使用maven指南
- IDEA中Maven下载不了依赖,百度了各种方法没什么用,逼我出绝招解决
- Maven 菜鸟教程 3 怎样启动web项目
- Maven依赖的作用域你到底用对了没有
- Maven配置Tomcat_maven和tomcat的区别
- maven项目使用mybatis插件Free Mybatis plugin「建议收藏」
- Maven环境安装、并整合进idea
- Maven简介和安装(配置中央仓库和本地仓库,IDEA配置Maven)
- 【Maven】分模块开发与设计与依赖管理
- Maven 手动添加 JAR 包到本地仓库详解程序员
- Maven仓库(本地仓库+远程仓库)
- Maven依赖
- Maven依赖配置和依赖范围
- 驱动Maven管理Oracle数据库驱动的安装与部署(maven的oracle)
- 使用Maven搭建Oracle数据库环境(maven oracle)
- 技巧Redis联合Maven进阶实践配置技巧篇(redis配置maven)