maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
我们知道,maven的依赖关系是有传递性的。如:A-->B,B-->C。但有时候,项目A可能不是必需依赖C,因此需要在项目A中排除对A的依赖。在maven的依赖管理中,有两种方式可以对依赖关系进行,分别是可选依赖(Optional Dependencies)以及依赖排除(Dependency Exclusions)。
一、可选依赖
当一个项目A依赖另一个项目B时,项目A可能很少一部分功能用到了项目B,此时就可以在A中配置对B的可选依赖。举例来说,一个类似hibernate的项目,它支持对mysql、oracle等各种数据库的支持,但是在引用这个项目时,我们可能只用到其对mysql的支持,此时就可以在这个项目中配置可选依赖。
配置可选依赖的原因:1、节约磁盘、内存等空间;2、避免license许可问题;3、避免类路径问题,等等。
示例:
[html] view plain copy
- <project>
- ...
- <dependencies>
- <!-- declare the dependency to be set as optional -->
- <dependency>
- <groupId>sample.ProjectB</groupId>
- <artifactId>Project-B</artifactId>
- <version>1.0</version>
- <scope>compile</scope>
- <optional>true</optional> <!-- value will be true or false only -->
- </dependency>
- </dependencies>
- </project>
假设以上配置是项目A的配置,即:Project-A --> Project-B。在编译项目A时,是可以正常通过的。
如果有一个新的项目X依赖A,即:Project-X -> Project-A。此时项目X就不会依赖项目B了。如果项目X用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。
二、依赖排除
当一个项目A依赖项目B,而项目B同时依赖项目C,如果项目A中因为各种原因不想引用项目C,在配置项目B的依赖时,可以排除对C的依赖。
示例(假设配置的是A的pom.xml,依赖关系为:A --> B; B --> C):
[html] view plain copy
- <project>
- ...
- <dependencies>
- <dependency>
- <groupId>sample.ProjectB</groupId>
- <artifactId>Project-B</artifactId>
- <version>1.0</version>
- <scope>compile</scope>
- <exclusions>
- <exclusion> <!-- declare the exclusion here -->
- <groupId>sample.ProjectC</groupId>
- <artifactId>Project-C</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- </project>
当然,对于多重依赖,配置也很简单,参考如下示例:
[html] view plain copy
- Project-A
- -> Project-B
- -> Project-D
- -> Project-E <! -- This dependency should be excluded -->
- -> Project-F
- -> Project C
A对于E相当于有多重依赖,我们在排除对E的依赖时,只需要在配置B的依赖中进行即可:
[html] view plain copy
- <project>
- <modelVersion>4.0.0</modelVersion>
- <groupId>sample.ProjectA</groupId>
- <artifactId>Project-A</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>jar</packaging>
- ...
- <dependencies>
- <dependency>
- <groupId>sample.ProjectB</groupId>
- <artifactId>Project-B</artifactId>
- <version>1.0-SNAPSHOT</version>
- <exclusions>
- <exclusion>
- <groupId>sample.ProjectE</groupId> <!-- Exclude Project-E from Project-B -->
- <artifactId>Project-E</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- </dependencies>
- </project>
参考资料:
1、maven官网:http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html
maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)相关推荐
- Maven中可选依赖(optional)和依赖排除(exclusion)的用法
前面必读的话 Optional和Exclusions都是用来排除jar包依赖使用的,两者在使用上却是相反.Optional表示可选择的,Exclusions表示排除 Optional定义后,该依赖只能 ...
- MAVEN专题之三、坐标和依赖详解
maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能.** 这是maven系列第3篇. 我们先来回顾一下什么是maven? maven是apache软件基金会组织维护的一款自动化构 ...
- Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)
1.Maven中依赖概述 Maven中的依赖关系是有传递性的.例如:项目B依赖项目C(B -> C),如果有一个项目A依赖项目B(A -> B)的话,那么项目A也会依赖项目C(A -> ...
- maven依赖optional可选依赖
optional表示可选依赖,比如项目依赖了dubbo-spring-boot-starter <dependency><groupId>org.apache.dubbo< ...
- maven排除依赖包的子依赖_漫画谈一下Maven依赖
Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...
- Maven精选系列--依赖范围、传递、排除
转载自 Maven精选系列--依赖范围.传递.排除 添加依赖 下面我添加了一个spring-web的依赖,maven就会去下载spring-web的jar包及它依赖的一些jar包. <depen ...
- npm、pnpm和yarn使用(官网、安装、命令行、上传自己的包、包版本号详解、更新卸载包、查看所有版本、同等依赖peer、可选依赖optional)
目录 npm 官网 npm install packageName npm i packagename@版本号 安装git上发布的包 npm ci 注意(对比npm i) npm outdated n ...
- maven工程导入项目打开404_Maven依赖配置和依赖范围
教程前面用坐标一一对应地描述了构件,并且保存在仓库中了.那用坐标描述好后,把它们放在仓库中的作用是什么呢?当其他项目需要在这些构件的基础上做开发的时候,用户就没必要自己再重新实现一遍了.直接指定坐标, ...
- Maven(1)--坐标与依赖
坐标详解 Maven通过坐标唯一标识一个组件.Maven坐标是通过groupId.artifactId.version.packaging.classfier这些元素来定义的. <groupId ...
最新文章
- [转]使用批处理设置、启动和停止服务
- Windows下的Memcache安装
- 算法---字符串去重
- Vue.js 是什么
- OS- -I/O之I/O设备
- 网络名称 转换 网络地址_网络地址转换| 计算机网络
- 预处理器sass_Sass — Web的预处理器装饰
- ReportViewer教程(1)-新建工程,添加Form和报表浏览器
- centos 升级内核方法
- 付出与收获对等的自然法则,执行力离开去做马上去做
- OpenNI体感应用开发实战 (Kinect相机)
- Numpy的学习6-深浅赋值(copydeep copy)
- php中时间戳和正常日期的相互转化
- php 非常简单的导入sql文件
- Windows手动添加开机启动项
- java url 中文转码_URL请求中文、符号“乱码”(解码、转码)解决方式
- OSChina 周四乱弹 ——来我数数,你们中间有几只毛毛虫
- Microsoft Word2010 中设置和取消英文首字母大写
- 深信服AC路由部署模式,怎么启用为PN与总部机构为PN连接
- zabbix_agentd.exe [13816]: ERROR: cannot connect to Service Manager: [0x00000005]
热门文章
- Python中获取字典中最值对应的键
- net-ldap for ruby openNebula ldap
- ios 应用 开发流程。。。
- Cookie的小知识
- Mono 2.4 and MonoDevelop 2.0 have been released
- 【webrtc】webrtc的rtp重传代码分析
- 面试前必看:Redis 和 Memcached 的区别
- Ubuntu 16.04下Caffe-SSD的应用(四)——ssd_pascal.py源码解读
- 页游开发_小花仙即将出手游,敬童年一起玩过的7K7K和4399
- python绘制3d坐标轴_python – 尝试使用matplotlib更新3D图形坐标