4.Maven依赖

1.依赖范围
一个项目要想使用别的jar包提供的功能,需要通过依赖将jar包引入到项目的classpath路径中。Maven提供了编译、测试、运行三种classpath,因此,依赖范围就是控制依赖与三种classpath的关系,依赖范围有以下5个取值。
• compile,缺省值,适用于所有阶段。
• provided,类似compile,编译和测试时有效,最后是在运行的时候不会被加入。官方举了一个例子,比如在JavaEE web项目中需要使用servlet的API,但是Tomcat中已经提供了这个jar,在编译和测试的时候需要使用这个api,但部署到tomcat的时候,如果还加入servlet构建就会产生冲突,这个时候就可以使用provided。
• runtime,适用运行和测试阶段,如JDBC驱动。
• test,只在测试时使用,用于编译和运行测试代码,不会随项目发布。
• system,与本机系统相关联,可移植性差,编译和测试时有效。
• import,导入,它只在dependencyManagement中使用,表示从其他pom中导入dependecy的配置,例如把A中的构建导入到B中。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven</groupId>
  <artifactId>B</artifactId>
  <packaging>pom</packaging>
  <name>B</name>
  <version>1.0</version>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>maven</groupId>
        <artifactId>A</artifactId>
        <version>1.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
</project>

2.依赖传递
A依赖中包含B依赖,那么在引入A依赖的时候,B依赖也会传递过来,此种现象称为依赖传递,如spring-boot-starter-web依赖中包含内嵌的spring-boot-starter-tomcat依赖。
在这里插入图片描述

3.依赖排除
上面演示了依赖传递,但是如果在引入spring-boot-starter-web依赖的同时,不希望引入spring-boot-starter-tomcat依赖,这个时候就要是用exclusions 排除依赖列表。

<dependencies>
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
	    <version>${spring-boot.version}</version>
	    <exclusions>
	        <exclusion>
	            <groupId>org.springframework.boot</groupId>
	            <artifactId>spring-boot-starter-tomcat</artifactId>
	        </exclusion>
	    </exclusions>
	</dependency>
</dependencies>	

4.依赖冲突
(1).简介
由于依赖具有传递性,就会产生依赖冲突,Maven提供了最短路径和先声明先使用两种策略来解决依赖冲突。 比如,在demo项目中添加一个6.02版本的MySQL依赖,在demo1项目中添加一个6.06版本的MySQL依赖并引入demo依赖,然后在call项目中,引入demo1依赖,查看使用的MySQL版本。

(1).最短路径策略
1. 在demo项目中添加一个6.02版本的MySQL依赖,重新install
在这里插入图片描述
2. 在demo1项目中添加一个6.06版本的MySQL依赖,重新install
在这里插入图片描述
3. 在call项目中添加依赖demo1, demo1依赖demo,此时根据最短路径原则,call项目会依赖6.06版本

<dependencies>
	<dependency>
	    <groupId>com.steven.maven</groupId>
	    <artifactId>demo1</artifactId>
	    <version>1.0-SNAPSHOT</version>
	</dependency>
</dependencies>

在这里插入图片描述

(2).先声明先使用策略
在call项目中依次引入demo和demo1依赖,demo依赖6.02版本,demo1依赖6.06版本,根据先声明先使用策略,call项目应该依赖demo的6.02版本。

<dependencies>
	<dependency>
	    <groupId>com.steven.maven</groupId>
	    <artifactId>demo</artifactId>
	    <version>1.0-SNAPSHOT</version>
	</dependency>
	<dependency>
	    <groupId>com.steven.maven</groupId>
	    <artifactId>demo1</artifactId>
	    <version>1.0-SNAPSHOT</version>
	</dependency>
</dependencies>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值