maven-3 工程信息、依赖范围、直接依赖和传递依赖

本文详细介绍了Maven工程的基本信息设置,包括公司域名、版本号的定义;深入解析了Maven依赖范围,如compile、test等作用域的含义及应用;并探讨了直接依赖与传递依赖的概念,以及如何解决传递依赖冲突,提供了多种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、maven工程的信息

在这里插入图片描述
公司域名说明:GroupId填写公司域名的倒序。
版本号说明:

  1. SNAPSHOT:测试版本
  2. RELEASE:发行版本

二、maven依赖范围

在这里插入图片描述

  1. compile(默认):项目编译、单元测试、运行部署的时候该依赖有效。如:spring-core包。
  2. provided:项目编译、单元测试的时候该依赖有效。
    如:Tomcat中自带的包servlet-api、jsp-api。若为compile作用域,因为运行部署到Tomcat后会与Tomcat的包冲突,所以在Tomcat中自带的包需要设置为该作用域。
  3. test:项目单元测试的时候该依赖有效。如:Junit包。
  4. runtime:项目编时不需要此依赖。如:JDBC驱动。
  5. system:虽然与provided作用域一样,但是该包从本地仓库中查找,不会从maven仓库中查找,一定需要配合systemPath属性使用。
    在这里插入图片描述

三、直接依赖和传递依赖

例:A项目依赖于B,B依赖于C。
则:B为A的直接依赖,C为A的传递依赖。

传递依赖的冲突

例:A项目依赖于B和C,B依赖D(1.1版本),C也依赖D(2.1版本)。
则:D为A的传递依赖,但是D的版本号有冲突,称为传递依赖冲突。

怎么解决传递依赖冲突?
方式一、maven的处理方式:

maven解决传递依赖冲突的两个原则:

  1. 第一声明者优先原则
    即:A先声明依赖B,然后在声明依赖C,这样就会使用B依赖的D(1.1版本)
  2. 最短路径优先原则
    直接依赖的优先级高于传递依赖,所以可以将D声明为直接依赖,配置版本号。
方式二、排除依赖

若:想用C依赖的D(2.1版本),则可以把B依赖的D(1.1版本)排除掉。
例:
struts2-spring-plugin 依赖 spring-beans:3.0.5.RELEASE
spring-context 依赖 spring-beans:4.2.4.RELEASE
在这里插入图片描述
现在来排除 struts2-spring-plugin 依赖的 spring-beans:3.0.5.RELEASE,使用 spring-context 依赖 spring-beans:4.2.4.RELEASE
在这里插入图片描述

方式三、版本锁定

使用 dependencyManagement 来声明依赖的版本号。
在这里插入图片描述

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.2.4.RELEASE</version>
      </dependency>
    </dependencies>
  </dependencyManagement>

更新时间:2020-1-7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值