Maven Scope 讲解
依赖的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 讲解相关推荐
- maven中pom.xml中的scope讲解
一.compile:编译范围 compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. ...
- maven scope/site/effective-pom/assembly
point1:<dependency>依赖范围 <scope/>中进行配置 --compile:默认配置,对编译/测试/运行三种都有效. --test:只对测试有效. --ru ...
- maven scope 属性和生命周期
2019独角兽企业重金招聘Python工程师标准>>> maven的dependency参数 scope的分类 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还 ...
- 如何使用Maven scope
maven 有6个scope类型,下面简单总结备忘下 <dependency><groupId>javax.servlet</groupId><artifac ...
- Maven Scope取值的含义
maven依赖关系中Scope的作用 Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<sc ...
- maven scope使用和理解
在Maven的依赖管理中,经常会用到依赖的scope设置.这里整理下各种scope的使用场景和说明,以及在使用中的实践心得. scope的使用场景和说明 1.compile 编译范围,默认scope, ...
- maven scope 的作用
一: 1.Maven中的依赖作用范围概述 Maven中使用 scope 来指定当前包的依赖范围和依赖的传递性.常见的可选值有:compile, provided, runtime, test, sys ...
- maven系列:maven依赖讲解
maven的一大亮点就是依赖,看一下pom.xml文件,如 <dependency><groupId>junit</groupId><artifactId&g ...
- Maven scope作用
Maven依赖中scope标签 介绍 compile runtime test provided system import 依赖传递 介绍 scope元素的主要作用就是控制 dependency 元 ...
最新文章
- 低通采样和带通采样定理
- shell+中sum的用法_SUM函数从入门到进阶,不用放弃!
- 2018 German Collegiate Programming Contest (GCPC 18)
- 外包物料成本核算时的供应商确定
- 读书笔记_大话数据结构第九章_排序
- java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...
- P1758-[NOI2009]管道取珠【dp】
- 【BZOJ1452】【JSOI2009】count
- PythonWEB框架之Tornado
- RISC-V MCU 自动浇花装置设计
- 绕过卡巴斯基dump进程lsass.exe内存
- LeetCode 520. Detect Capital
- eclipse 虚拟机启动失败解决方案
- 四网协同之WLAN专利分析与启示
- 有关公司的各个部门英文缩写简称
- 总结 of 字节跳动的比赛(Bute Cup2018)——新闻标题生成
- CF35C Fire Again
- PLC无线通讯方案,支持西门子,三菱,欧姆龙,台达等各品牌PLC
- 【建议收藏】一文了解FPC柔性电路板(5.29更新)
- 转发:网桥介绍——好理解