Maven项目依赖管理中的scope标签

目录

前述

详述

compile:

test:

runtime:

provided:

system:

import

scope的依赖传递性

总结:


前述

scope中在maven项目依赖管理中,负责管理依赖是否参与测试、打包、编译、运行周期,以及依赖之间的传递性。

compile,test,runtime,provided,system五个参数,默认为compile

详述

compile:

默认,表示该依赖参与项目的:测试、打包、编译、运行周期。表示该依赖是一个比较强的依赖。

test:

见名知意,表示该依赖仅参与测试相关工作,可以对测试代码进行编译、执行。但不会被打包,如:junit

runtime:

表示该依赖参与运行、测试、打包,但不参与编译周期,与complie相比,跳过了编译期。例如:JDBC驱动

provided:

表示该依赖 参与编译、运行、测试周期,但不参与打包。

system:

system与provided相同,区别在于,system表示该依赖是不是从maven仓库获取,而是从本地系统文件获取的,并且需要添加一个systemPath属性参数。

例子如下:

<dependency>
    <groupid>org.hamcrest</groupid>
    <artifactid>hamcrest-core</artifactid>
    <version>1.5</version>
    <scope>system</scope>
    <systempath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systempath>
</dependency>

import

这里提到import,是maven在2.0.9版本后添加的,用来解决pom的单继承问题。

比如springboot项目中,通过<parent>继承Spring-boot-starter-parent来引用springboot默认依赖,但可能又需要继承公司的<parent>,但<parent>只能继承一个,此时,可以在<dependencyManagement>中使用<scope>import</scope>来配置新的<parent>。import并不限制依赖关系传递性

代码示例如下:

已经继承了springboot的默认依赖

<!-- Inherit defaults from Spring Boot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.BUILD-SNAPSHOT</version>
</parent>

此时又需要继承公司的<parent>,但<parent>只能单继承,可以如下方式解决:

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.1.BUILD-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

通过上面方式,就可以获取spring-boot-dependencies.2.0.1.BUILD-SNAPSHOT.pom文件中dependencyManagement配置的jar包依赖。

但如果想要再多依赖一些,可以继续添加<dependency>

<dependencyManagement>
 <dependencies>
  <dependency>
  <!-- Import dependency management from Spring Boot -->
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-dependencies</artifactId>
   <version>2.0.1.BUILD-SNAPSHOT</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
 <!-- 新添加 -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-dependencies</artifactId>
   <version>2.0.1.BUILD-SNAPSHOT</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
 </dependencies>
</dependencyManagement>

import能解决maven单继承问题,但并不参与限制依赖关系的传递性。

scope的依赖传递性

举个例子,让我们更好的理解scope的依赖传递性:

A–>B–>C。当前项目为A,A依赖于B,B依赖于C。知道B在A项目中的scope,那么怎么知道C在A中的scope呢?答案是: 
当C是test或者provided时,C直接被丢弃,A不依赖C; 
否则A依赖C,C的scope继承于B的scope。

总结:

对于maven中的scope还是挺重要的,尤其是依赖之间的关系传递,是我们在项目中解决依赖问题的关键,更好的理解scpoe,也更有利于我们了解在maven的依赖管理机制中,依赖之间的关系是怎样的。

如果您有疑惑,或者其他见解,希望及时留言交流。

参考文档:
https://blog.csdn.net/cd18333612683/article/details/66478332
https://blog.csdn.net/u010002184/article/details/87989164
https://blog.csdn.net/blueheart20/article/details/81014116
https://blog.csdn.net/leoxyk/article/details/79622507
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值