maven中的依赖范围(scope标签)

112 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

测试依赖的范围

这里我们就要揭开scope标签的谜底了,此前在pom.xml文件中配置依赖坐标时,我们会在下面加一个scope标签,并且说过,如果我们不加的话,默认会是compile值,其实它指的就是依赖范围。

依赖范围

标签的位置:dependencies/dependency/scope

标签的可选值:compile/test/provided/system/runtime/import

compile、test、provided范围

compile范围,顾名思义,是整个编译运行过程均有效,空间上包括main目录和test目录,运行时也贯穿开发过程以及部署到服务器上(看有没有打入war包)的运行过程

而test范围,则只有在test目录以及开发过程中适用,并不能在main目录和部署到服务器后适用

provided范围则比test范围多出一个main目录空间的依赖范围,只是在部署到服务器时超出(为防止自己导入的包在部署到服务器上后与其自带的包冲突,比如servlet-api以及jsp-api,如果发生冲突,错误很难找!)

注:一般在maven仓库里找到坐标时,其内给出的值就是最合适的范围,不需要做改动

测试方式

通过import语句将要测试的类引入当前类,引入后,若编译成功,则可以使用,这个范围的依赖对当前类有效;若编译失败,则不能使用,这个范围的依赖对当前类无效

补充:依赖的传递性

提出问题: 当A依赖B,B依赖C,A能否与C构成依赖关系?

回答: 只有当B依赖C的范围是compile范围时,才能实现传递依赖

如果A前再加一个D,隶属于另一个Java工程,若找不到jar包,则是本地仓库没有更新,需要mvn install进行重新安装,便能成功添加依赖