ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Maven scope 作用域 详解

2022-09-09 01:31:20  阅读:231  来源: 互联网

标签:provided 依赖 作用域 Maven 编译 测试 scope 运行 范围


一、scope作用域介绍

Maven的一个哲学是约定大于配置,所以在maven中,很多内容都有默认值,scope的默认值是compile。

scope元素的作用:控制 dependency(依赖)元素的使用范围。

通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。这个范围包括,编译、测试、运行,并且还可以加上是否被打入包中。

二、Scope分类

Scope的作用域范围包括compile、test、provided、runtime、system、import。

1. compile

此范围为默认依赖范围,是一个比较强的依赖,适用于所有阶段。

这些dependencie(依赖)的jar,会传递到其他依赖的上层项目中。

由于运行时需要所以编译范围的依赖会被打包,会随着项目一起发布。

范围:编译、测试、运行(部署)都有效 。

2. test

表示被依赖项目仅仅参与测试相关的工作,在编译和运行时都不需要,只在编译测试代码或者运行测试代码的时候才能使用该依赖。比较典型的如junit。

由于运行时不需要所以test范围依赖不会被打包。

范围:仅测试有效

3. provided

provided依赖在编译和测试时需要,在运行时不需要。

正因为运行时无效,可以防止和tomcat下jar冲突,因为servlet api被tomcat容器提供,就不需要maven再重复引入。

由于运行时不需要所以provided范围依赖不会被打包。

范围:编译、测试有效。

4. runtime

runtime依赖在运行和测试的时候需要,但在编译的时候不需要。与compile相比,被依赖项目无需参与项目的编译。

比如:jdbc的驱动包,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

由于运行时需要所以runtime范围的依赖会被打包。

范围:测试、运行有效。

5. system

system范围依赖与provided类似,但是你必须显式的提供一个位于本地系统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用。


范围:测试、运行有效

三、总结

依赖范围由强到弱的顺序是:compile>provided>runtime>test

由于system依赖不怎么推荐使用。下面排序就不排入了,如果排序和provided并排

标签:provided,依赖,作用域,Maven,编译,测试,scope,运行,范围
来源: https://www.cnblogs.com/zhouXX/p/16671333.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有