依赖的Scope

scope定义了类包在项目的使用阶段。项目阶段包括: 编译,运行,测试和发布。

分类说明

compile

默认scope为compile,表示为当前依赖参与项目的编译、测试和运行阶段,属于强依赖。打包之时,会达到包里去。

test

该依赖仅仅参与测试相关的内容,包括测试用例的编译和执行,比如定性的Junit。

runtime

依赖仅参与运行周期中的使用。一般这种类库都是接口与实现相分离的类库,比如JDBC类库,在编译之时仅依赖相关的接口,在具体的运行之时,才需要具体的mysql、oracle等等数据的驱动程序。
此类的驱动都是为runtime的类库。

provided

该依赖在打包过程中,不需要打进去,这个由运行的环境来提供,比如tomcat或者基础类库等等,事实上,该依赖可以参与编译、测试和运行等周期,与compile等同。区别在于打包阶段进行了exclude操作。

system

使用上与provided相同,不同之处在于该依赖不从maven仓库中提取,而是从本地文件系统中提取,其会参照systemPath的属性进行提取依赖。

import

这个是maven2.0.9版本后出的属性,import只能在dependencyManagement的中使用,能解决maven单继承问题,import依赖关系实际上并不参与限制依赖关系的传递性。

systemPath

当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径,例如:

<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>

dependency中的type

引入某一个依赖时,必须指定type,这是因为用于匹配dependency引用和dependencyManagement部分的最小信息集实际上是{groupId,artifactId,type,classifier}。在很多情况下,这些依赖关系将引用没有classifier的jar依赖。这允许我们将标识设置为{groupId,artifactId},因为type的默认值是jar,并且默认classifier为null。
type的值一般有jar、war、pom等,声明引入的依赖的类型

dependency中的classifier

Classifier可能是最容易被忽略的Maven特性,但它确实非常重要,我们也需要它来帮助规划坐标。设想这样一个情况,有一个jar项目,就说是 dog-cli-1.0.jar 吧,运行它用户就能在命令行上画一只小狗出来。现在用户的要求是希望你能提供一个zip包,里面不仅包含这个可运行的jar,还得包含源代码和文档,换句话说,这是比较正式的分发包。这个文件名应该是怎样的呢?dog-cli-1.0.zip?不够清楚,仅仅从扩展名很难分辨什么是Maven默认生成的构件,什么是额外配置生成分发包。如果能是dog-cli-1.0-dist.zip就最好了。这里的dist就是classifier,默认Maven只生成一个构件,我们称之为主构件,那当我们希望Maven生成其他附属构件的时候,就能用上classifier。常见的classifier还有如dog-cli-1.0-sources.jar表示源码包,dog-cli-1.0-javadoc.jar表示JavaDoc包等等。

classifier它表示在相同版本下针对不同的环境或者jdk使用的jar,如果配置了这个元素,则会将这个元素名在加在最后来查找相应的jar,例如:

jdk17
jdk18

总结
scope的概念在maven的依赖定义中非常重要,大家需要搞清楚他们的关系和适用范围。

Maven Scope 讲解相关推荐

  1. maven中pom.xml中的scope讲解

    一.compile:编译范围 compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. ...

  2. maven scope/site/effective-pom/assembly

    point1:<dependency>依赖范围 <scope/>中进行配置 --compile:默认配置,对编译/测试/运行三种都有效. --test:只对测试有效. --ru ...

  3. maven scope 属性和生命周期

    2019独角兽企业重金招聘Python工程师标准>>> maven的dependency参数 scope的分类 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还 ...

  4. 如何使用Maven scope

    maven 有6个scope类型,下面简单总结备忘下 <dependency><groupId>javax.servlet</groupId><artifac ...

  5. Maven Scope取值的含义

    maven依赖关系中Scope的作用 Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<sc ...

  6. maven scope使用和理解

    在Maven的依赖管理中,经常会用到依赖的scope设置.这里整理下各种scope的使用场景和说明,以及在使用中的实践心得. scope的使用场景和说明 1.compile 编译范围,默认scope, ...

  7. maven scope 的作用

    一: 1.Maven中的依赖作用范围概述 Maven中使用 scope 来指定当前包的依赖范围和依赖的传递性.常见的可选值有:compile, provided, runtime, test, sys ...

  8. maven系列:maven依赖讲解

    maven的一大亮点就是依赖,看一下pom.xml文件,如 <dependency><groupId>junit</groupId><artifactId&g ...

  9. Maven scope作用

    Maven依赖中scope标签 介绍 compile runtime test provided system import 依赖传递 介绍 scope元素的主要作用就是控制 dependency 元 ...

最新文章

  1. 低通采样和带通采样定理
  2. shell+中sum的用法_SUM函数从入门到进阶,不用放弃!
  3. 2018 German Collegiate Programming Contest (GCPC 18)
  4. 外包物料成本核算时的供应商确定
  5. 读书笔记_大话数据结构第九章_排序
  6. java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...
  7. P1758-[NOI2009]管道取珠【dp】
  8. 【BZOJ1452】【JSOI2009】count
  9. PythonWEB框架之Tornado
  10. RISC-V MCU 自动浇花装置设计
  11. 绕过卡巴斯基dump进程lsass.exe内存
  12. LeetCode 520. Detect Capital
  13. eclipse 虚拟机启动失败解决方案
  14. 四网协同之WLAN专利分析与启示
  15. 有关公司的各个部门英文缩写简称
  16. 总结 of 字节跳动的比赛(Bute Cup2018)——新闻标题生成
  17. CF35C Fire Again
  18. PLC无线通讯方案,支持西门子,三菱,欧姆龙,台达等各品牌PLC
  19. 【建议收藏】一文了解FPC柔性电路板(5.29更新)
  20. 转发:网桥介绍——好理解

热门文章

  1. Sketch算法-CM Sketch、Count Sketch等
  2. insmod depmod modprobe的区别及用法
  3. accept函数(TCP)
  4. word图片插入不清晰
  5. #Eclipse IDE for Java EE Developers 的下载及初步使用
  6. 为什么python代码运行不了_为什么我的python代码不能正常运行?
  7. CUDA基础(一):CPU体系架构概述
  8. 2021春深入理解计算机系统大作业---hello的一生
  9. 事务的传播行为(讲得比较好)
  10. 机器学习系列(8)_回归算法,支持向量机