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、避免类路径问题,等等。     示例:

<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): <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>     当然,对于多重依赖,配置也很简单,参考如下示例: Project-A    -> Project-B         -> Project-D               -> Project-E <! -- This dependency should be excluded -->               -> Project-F    -> Project C     A对于E相当于有多重依赖,我们在排除对E的依赖时,只需要在配置B的依赖中进行即可: <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>

---------------------

本文来自 ado1986 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ado1986/article/details/39547839?utm_source=copy

参考资料:

1、maven官网:http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

原文地址:https://www.cnblogs.com/geidianmianzi/p/9708568.html

时间: 2024-10-14 22:36:54

Maven中的可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)的相关文章

maven中pom的继承以及dependencies与dependencyManagement的区别

https://blog.csdn.net/zzm3280/article/details/84952623 分类专栏: maven 本文转自:https://blog.csdn.net/liutengteng130/article/details/46991829 如有侵权马上删除在上一个项目中遇到一些jar包冲突的问题,之后还有很多人分不清楚dependencies与dependencyManagement的区别,本篇文章将这些区别总结下来. 1.DepencyManagement应用场景当

maven中的pom.xml解析

pom.xml用于项目描述,组织管理,依赖管理和构件信息的管理. <project>是pom.xml的一些约束信息: <modelVersion>指定了当前pom的版本: 坐标信息组成:<groupId>定义当前maven属于哪一个实际的项目,由反写的公司网址+项目名组成 <artifactId>模块的标识,由项目名+模块名组成 <version>当前项目的版本号,一般由三个数字组成,第一个0代表大版本号,第二个0代表分支版本号,第三个0代表小版

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的项目,它支持对mys

maven中maven dependencies中依赖出现了项目

maven 中maven dependencies中依赖出现了项目,把依赖的项目关掉,项目消失,但是还是无法打包 ,出现的错误如图.说明:依赖的项目为project-dao  打包的项目为project-service  都在project-parent中有依赖. project-dao是可以打包成功的.project-service中依赖dao的jar包也可以过 来. [INFO] Scanning for projects... [INFO]                        

Maven中的DependencyManagement和Dependencies

这里介绍一个在父项目中的根结点中声明dependencyManagement和dependencies的区别 dependencyManagement Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式.通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素.使用pom.xml 中的dependencyManagement 元素能让 所有在子项目中引用一个依赖而不用显式的列出版本号.Maven 会沿着父子层次向

maven中的 dependencies 和 dependencyManagement 的区别

今天我在配置 sellercenter 的接口测试环境的时候,发现一些依赖的写法不太一致: 比如有的依赖的<scope>是写在子项目中的 <dependencies> 下的<dependency> 标签中, 而有的依赖的<scope>是写在父项目中的<dependencyManagement> 中 . 我知道前一种写法是对的,而后一种写法却不知道对不对了,从网上查了下,没有找到非常确切的答案,于是自己验证了一把. 把验证过程给大家说下,大家也可以

在Maven仓库中添加Oracle数据库的JDBC驱动依赖

今天在使用IDEA构建Maven项目时,发现Oracle数据库JDBC驱动依赖使用不了,就在网上搜索了一下,下面是不能使用的原因. 由于Oracle授权问题,Maven3不提供oracle JDBC driver,我们也可以在Maven的中心搜索ojdbc驱动包,但是可以看到版本过于陈旧,即使有坐标,也下载不了. 为了可以在使用Maven构建的项目中使用Oracle JDBC driver,我们就必须手动添加Oracle的JDBC驱动依赖到本地仓库中. 既然要手动添加Maven依赖到本地仓库中,

Maven中依赖的scope的依赖范围

在Maven中依赖的域有这几个:import.provided.runtime.compile.system.test 1compile 的范围 当依赖的scope为compile的时候,那么当前这个依赖的包,会在编译的时候将这个依赖加入进来,并且在打包(mvn package)的时候也会将这个依赖加入进去 意思就是:编译范围有效,在编译与打包时都会存储进去 2provided的范围 当依赖的scope为provided的时候,在编译和测试的时候有效,在执行(mvn package)进行打包成w

如何在Maven中配置Spring依赖

如何在Maven中配置Spring依赖 *前言: 这篇文章讨论了如何在Maven配置Spring的一些细节,这里介绍了一些主要的Maven依赖管理内容,当然还存在一些没有讨论到的内容,不过这篇文章应该是在项目中使用Spring的一个好的起点.最新的Spring发布版可以在Maven仓库中找到.* 在Maven中Spring的基础配置 Spring是高度模块化的,可以单独使用Spring的某个库而不需要依赖Spring的其他库.比如,使用Spring Context库不需要依赖Spring Per