Maven(六)Maven传递性和依赖性

一、依赖管理

1.1、依赖声明

dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>

1.2、依赖管理原理

在这里插入图片描述

1.3、依赖范围

依赖范围scope主代码classpath有效性测试代码classpath有效性运行时classpath有效性例子
compileYYYlog4j
test-Y-junit
providedYY-servlet-api
runtime--Yjdbc driver
  1. compile:编译范围,默认scope,在工程环境的classpath(编译环境)和打包(如果是war包,会包含在war包中)时候都有效
  2. provided:表示该jar包已由容器(tomcat)或jdk,只在编译的classpath中使用,打包时不包含在目标包中。常见的:servlet-api和jsp-api等由目标容器提供,无需打包到war包中。如果不配置为provided,在tomcat6+会出现包冲突。
  3. runtime:一般是运行和测试环境使用,编译时不加入classpath,打包时会打包到目标包中。一般是通过动态加载或反射加载。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫描动态加载的情况。典型的包括:JDBC驱动等
  4. test:单元测试场景使用,编译时加入classpath,打包时不加入。如:junit

二、依赖传递

2.1、直接依赖和间接依赖

如果B中使用A,C中使用B,那么B是C的直接依赖,A是C的间接依赖。

在这里插入图片描述

2.2、依赖范围对传递依赖的影响

在这里插入图片描述

  • (1) 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • (2) 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • (3) 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依
  • 赖的范围同样为 provided;
  • (4) 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但
  • compile例外,此时传递的依赖范围为runtime;

2.3、依赖冲突

  1. 如果直接依赖与间接依赖包含同一坐标不同版本的依赖资源,以直接依赖的版本为准(就近原则)
  2. 如果直接依赖中包含同一坐标的不同版本,以配置顺序下方的版本为准(就近原则)

2.4、可选依赖

optional:true、false用于设置是否可选,也可以理解为jar包是否向下传递。

true,不传递;false,传递;默认为false

2.5、排除依赖

在直接依赖的配置里面添加 exclusions→exclusion 元素,指定要排除依赖的 groupId 和 artifactId,不需要添加版本号

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-core</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑谈子云亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值