Maven依赖传递排除指定的依赖关系

应用场景:projectA 依赖projectB, projectB 依赖projectC时

projectA中pom.xml
<groupId>com.cn.projectA</groupId>
<artifactId>projectA</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>com.cn.projectB</groupId>
        <artifactId>projectB</artifactId>
        <version>1.0B</version>
        <!--方案一:使用execusions排除A与C的依赖  -->
        <exclusions>
            <exclusion>
                <groupId>com.cn.projectC</groupId>
                <artifactId>projectC</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

projectB中的pom.xml
<groupId>com.cn.projectB</groupId>
    <artifactId>projectB</artifactId>
    <version>1.0B</version>
    <dependencies>
        <dependency>
            <groupId>com.cn.projectC</groupId>
            <artifactId>projectC</artifactId>
            <version>1.0C</version>
            <!--依赖传递选项,默认为false为依赖,ture为不依赖传递
            方案二:通过optional设置自动或手动,排除A与C的依赖
                -->
            <optional>false</optional>
        </dependency>
    </dependencies>

    projectC的pom.xml
    <groupId>com.cn.projectC</groupId>
    <artifactId>projectC</artifactId>
    <version>1.0C</version>

原文地址:https://blog.51cto.com/1929297/2401053

时间: 2024-10-16 13:36:42

Maven依赖传递排除指定的依赖关系的相关文章

Maven依赖传递、依赖传递排除、依赖冲突

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628429.html  一:Maven依赖传递 假如有Maven项目A,项目B依赖A,项目C依赖B.那么我们可以说 C依赖A.也就是说,依赖的关系为:C->B->A. 那么我们执行项目C时,会自动把B.A都下载导入到C项目的jar包文件夹中. 这就是依赖的传递性. 二:依赖传递的排除 如上,C->B->A.加入现在不想执行C时把A下载进来,那么我们可以用 <exclusions>标

Maven deploy时排除指定的某个module

在某个module的pom.xml中添加如下配置 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> <configuration> <skip>true</skip> </configur

Maven 系列 三 :坐标和依赖

1 . 坐标 maven 的所有构件均通过坐标进行组织和管理.maven 的坐标通过 5 个元素进行定义,其中 groupId.artifactId.version 是必须的,packaging 是可选的(默认为jar),classifier 是不能直接定义的. groupId:定义当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一一对应. artifactId:定义当前 Maven 项目的一个模块,默认情况下,Maven 生成的构件,其文件名会以 artifactI

Maven学习笔记之——坐标和依赖(上)

Maven学习笔记之--坐标和依赖(上) 1.    Maven坐标概念 Maven通过构件的坐标来在Maven仓库中定位到具体的构件.Maven的坐标元素包括groupId.artifactId.versiion.packaging.classifier.Maven内置了一个中央仓库地址.需要时Maven会根据坐标到其中下载.具体关于中央仓库的介绍在后面. 2.    Maven坐标详解 比如下面一组坐标: <groupId>org.andy.items</groupId> &l

maven详解之坐标与依赖

看着简单而又复杂的pom.xml文件,看似熟悉,当自己编写的时候觉得简单,但是看人家项目的时候又觉得复杂的很,现在我们一起来分析这个pom文件. Maven的坐标为各种构件引入了秩序,任何一个构件都必须明确的定义自己的坐标,maven的坐标包括如下的元素: groupId: 定义当前Maven项目隶属的实际项目 artifactId: 该元素定义实际项目中的一个Maven项目或模块 version: 该元素定义Maven项目当前所处的版本 packaging: 该元素定义Maven项目的打包方式

Maven (一)--- 入门和依赖

部分图片来自参考资料 问题 : - maven 生命周期是怎么样的 - mvn clean install 与 mvn clean deploy 的区别是什么 概述 Maven 是一种构建项目的工具,能够帮我们自动化构建过程,从清理,测试到生成报告,再到打包和部署,不仅如此它还是一个依赖管理工具和项目信息管理工具,它提供了中央仓库,能帮我们自动下载构件. Maven 安装注意事项 Maven 安装的教程我就不再重复讲解,主要就是先安装JDK,然后配置环境变量,正常安装即刻.Maven 用户可以选

[Maven实战](9)传递性依赖

了解Spring的朋友都知道,创建一个Spring Framework项目都需要依赖什么样的Jar包.如果不使用Maven,那么在项目中就需要手动下载相关的依赖.由于Spring Framework又会依赖与其他开源类库,因此实际中往往会下载Spring Framework的jar包,还的下载所有它依赖的其他jar包.这么做往往就引入了很多不必要的依赖.另一种做法是只下载Spring Framework的jar包,不包含其他的相关依赖,到实际使用的时候,再根据报错信息,或者查询相关文档,加入需要

Maven学习笔记之——坐标和依赖(中)

Maven学习笔记之--坐标和依赖(中) 1.    传递性依赖 1.1    何为传递性依赖 项目中经常有引入一个jar包还要引入其他与其相关的jar包.自己搜的话要注意很多.比如版本问题等.而Maven会解析解析各个直接依赖的POM.将哪些必要的间接依赖以传递依赖的形式引入到项目中. 依赖范围不仅可以控制依赖与三种classpath关系.还对传递依赖产生影响. 假设A依赖B,B依赖C,我们说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖.第一直接依赖的范围和第二直接依赖

Maven学习笔记之——坐标和依赖(下)

Maven学习笔记之--坐标和依赖(下) 1.    最佳实践 归纳Maven依赖使用的常用技巧.方便用来避免和处理很多常见问题. 1.1.     排除依赖 传递性依赖会给项目隐式地引入很多依赖,这极大地简化了项目依赖的管理.但是有些时候这种特性也会带来问题.例如,当前项目有一个第三方依赖,而这个第三方依赖由于某些原因依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT的不稳定性会直接影响到当前的项目.这时候需要排除掉该SNAPSH