`

maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

 
阅读更多

转:https://blog.csdn.net/ado1986/article/details/39547839

 

我们知道,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
 
  1. <project>  
  2.   ...  
  3.   <dependencies>  
  4.     <!-- declare the dependency to be set as optional -->  
  5.     <dependency>  
  6.       <groupId>sample.ProjectB</groupId>  
  7.       <artifactId>Project-B</artifactId>  
  8.       <version>1.0</version>  
  9.       <scope>compile</scope>  
  10.       <optional>true</optional> <!-- value will be true or false only -->  
  11.     </dependency>  
  12.   </dependencies>  
  13. </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
 
  1. <project>  
  2.   ...  
  3.   <dependencies>  
  4.     <dependency>  
  5.       <groupId>sample.ProjectB</groupId>  
  6.       <artifactId>Project-B</artifactId>  
  7.       <version>1.0</version>  
  8.       <scope>compile</scope>  
  9.       <exclusions>  
  10.         <exclusion>  <!-- declare the exclusion here -->  
  11.           <groupId>sample.ProjectC</groupId>  
  12.           <artifactId>Project-C</artifactId>  
  13.         </exclusion>  
  14.       </exclusions>   
  15.     </dependency>  
  16.   </dependencies>  
  17. </project>  

    当然,对于多重依赖,配置也很简单,参考如下示例:

[html] view plain copy
 
  1. Project-A  
  2.    -> Project-B  
  3.         -> Project-D   
  4.               -> Project-E <! -- This dependency should be excluded -->  
  5.               -> Project-F  
  6.    -> Project C  

    A对于E相当于有多重依赖,我们在排除对E的依赖时,只需要在配置B的依赖中进行即可:

[html] view plain copy
 
  1. <project>  
  2.   <modelVersion>4.0.0</modelVersion>  
  3.   <groupId>sample.ProjectA</groupId>  
  4.   <artifactId>Project-A</artifactId>  
  5.   <version>1.0-SNAPSHOT</version>  
  6.   <packaging>jar</packaging>  
  7.   ...  
  8.   <dependencies>  
  9.     <dependency>  
  10.       <groupId>sample.ProjectB</groupId>  
  11.       <artifactId>Project-B</artifactId>  
  12.       <version>1.0-SNAPSHOT</version>  
  13.       <exclusions>  
  14.         <exclusion>  
  15.           <groupId>sample.ProjectE</groupId> <!-- Exclude Project-E from Project-B -->  
  16.           <artifactId>Project-E</artifactId>  
  17.         </exclusion>  
  18.       </exclusions>  
  19.     </dependency>  
  20.   </dependencies>  
  21. </project>  

 

参考资料:

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

 

分享到:
评论

相关推荐

    Maven中的依赖

    在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的管理和构建过程。本文将深入探讨Maven中的依赖管理,以及如何有效地利用这一功能。 Maven是Apache软件基金会开发的一个项目管理工具,它的...

    maven 中引入依赖的包

    在Java开发领域,Maven是一个不可或缺的构建工具,它通过管理项目依赖关系,简化了项目的构建、测试和部署过程。本文将深入探讨如何在Maven项目中引入依赖的包,并结合相关源码和工具,帮助开发者更好地理解和使用这...

    maven依赖小例子

    在`&lt;dependency&gt;`标签内,还可以添加`&lt;exclusions&gt;`子标签来排除特定的依赖,避免冲突。例如: ```xml &lt;dependency&gt; &lt;groupId&gt;com.somegroup&lt;/groupId&gt; &lt;artifactId&gt;some-artifact &lt;version&gt;1.0.0 &lt;exclusions&gt;...

    Maven的依赖验证项目

    但是,这可能导致版本冲突,因此Maven提供了`exclusions`标签来排除不需要的依赖。 在进行依赖验证时,Maven的`dependency:tree`命令可以帮助我们可视化项目的依赖结构,查找潜在的冲突。此外,`dependency:analyze...

    Maven的Dependency测试

    在Java开发中,Maven是一个不可或缺的构建工具,它通过管理项目的依赖关系,简化了项目的构建、编译和部署过程。本文将深入探讨Maven的Dependency测试方面,帮助开发者理解如何有效地管理和测试项目依赖。 1. **...

    Maven 依赖详细理解.pdf

    为了避免依赖冲突,我们可以在dependency中使用exclusions标签来排除某些不需要的传递性依赖。例如,如果我们不想使用spring-boot-starter-web所依赖的spring-boot-starter-tomcat,我们可以在spring-boot-starter-...

    Maven 多项目依赖关系

    3. **排除依赖**:有时候,某个依赖库可能包含了不必要的或者冲突的子依赖,此时可以通过`&lt;exclusions&gt;`标签来排除特定的子依赖。 4. **依赖范围**:Maven允许我们为依赖设置不同的范围,如编译(compile)、测试...

    maven组件依赖测试

    在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。本测试主要关注"Maven组件依赖"这一核心概念,这在Java开发中至关重要,尤其是在大型项目或企业级应用中。Maven...

    grails3.2.8的maven依赖

    如果需要排除某个特定的依赖,可以通过`&lt;exclusions&gt;`标签实现。此外,Maven的生命周期和构建过程可以通过定义`&lt;build&gt;`标签来定制,包括编译、测试、打包等步骤。 在实际开发中,Grails 3.2.8与Maven的结合使得...

    试试 IDEA 解决 Maven 依赖冲突的高能神器.docx

    总的来说,解决Maven依赖冲突需要理解其工作原理,结合IDEA提供的工具,如Maven Helper插件和依赖结构图,可以有效地定位和排除冲突,保持项目的稳定性和可维护性。在实际开发中,避免引入不必要的依赖和定期清理...

    Maven 本地仓库

    - **dependency**: Maven 的 `&lt;dependencies&gt;` 标签用于声明项目所需要的外部库。 - **scope**: 依赖范围,如 `compile`(编译时)、`runtime`(运行时)、`test`(测试时)等,决定依赖在哪些阶段可用。 - **...

    apache maven安装包和maven实用技巧

    7. **排除依赖**:在依赖中使用`exclusions`标签可以排除特定的子依赖。 8. **多模块项目**:如果你的项目由多个模块组成,可以在每个模块的POM中指定父POM,实现共享配置。 9. **profiles**:配置不同的环境(如...

    Maven类包冲突终极解决小技若干

    - **原理**:通过在 `pom.xml` 文件中使用 `&lt;exclusions&gt;` 标签,可以排除特定的依赖项或版本,从而避免不必要的冲突。 ```xml &lt;dependency&gt; &lt;groupId&gt;com.example&lt;/groupId&gt; &lt;artifactId&gt;project-b ...

    SpringBoot项目使用maven配置文件

    - 当出现依赖冲突时,可以通过 `&lt;dependencyManagement&gt;` 标签进行统一管理,或者使用 `&lt;exclusions&gt;` 标签排除不需要的子依赖。 8. Maven的命令行工具: - `mvn clean` 清理项目。 - `mvn compile` 编译源代码...

    黑马maven笔记第二天

    - **依赖管理**:Maven提供了一种标准化的方式来管理项目依赖,简化了传统手动添加JAR包的过程,确保了项目间依赖的一致性和稳定性。 **2. 一键构建** - **tomcat:run命令**:通过Maven的插件可以直接在命令行...

    Maven高级1

    版本锁定意味着在dependencyManagement中指定依赖的固定版本,然后在dependencies中引用,确保所有依赖都使用该版本。 在实际开发中,如构建SSM(Spring+SpringMVC+Mybatis)项目,可以通过Maven协调这些框架的依赖...

    maven2快速入门教程

    2. **排除依赖**:通过&lt;exclusions&gt;排除不需要的子依赖。 3. **依赖范围**:scope属性定义依赖在哪个阶段有效,如compile、test、runtime等。 ### 七、Maven的Repository 1. **本地仓库**:默认在用户主目录的`....

    maven Pom详解.pdf

    - **依赖排除**:有时可能需要排除某些间接依赖,可以使用`&lt;exclusions&gt;`标签。 #### 其他配置 - **`&lt;build&gt;`**:定义了项目的构建逻辑,如插件配置、源代码目录等。 - **`&lt;profiles&gt;`**:定义了项目构建的不同...

    maven的导包在配置文件中怎么写

    如果某个依赖包含你不需要的子依赖,可以使用`&lt;exclusions&gt;`标签进行排除。例如: ```xml &lt;dependency&gt; &lt;groupId&gt;com.example.group&lt;/groupId&gt; &lt;artifactId&gt;example-artifact &lt;version&gt;1.2.3 &lt;exclusions&gt; ...

    Maven精品教程视频01

    5. **依赖管理**:理解 Maven 如何自动解决依赖冲突,以及如何使用 `dependencyManagement` 和 `exclusions` 标签来精细化管理依赖。 6. **Maven 生命周期**:解释 Maven 的 clean、validate、compile、test、...

Global site tag (gtag.js) - Google Analytics