Maven中依赖的scope的依赖范围

时间:2024-04-12 17:26:06

在Maven中依赖的域有这几个:import、provided、runtime、compile、system、test。

注:在默认的情况下scope的范围是compile

Maven中依赖的scope的依赖范围

import使用的比较少,可参考:https://www.cnblogs.com/huahua035/p/7680607.html

这里介绍其他五种。

通过scope属性配置依赖范围,scope属性可以取的值如下:

Maven中依赖的scope的依赖范围

 

详细解释:

1. compile :编译需要,测试需要、运行时也需要(会被打包),大部分的jar包都是这个范围

【示例】对mavenDemo进行打包操作,查看war包内应该有所有的jar

 Maven中依赖的scope的依赖范围

2. provided :编译需要,测试需要,运行时不需要(不会被打包),例如servlet-api

【示例】在mavenDemo引入servlet-api.jar的依赖,但servlet-api只在编译的时候需要,测试需要,运行时不需要(不会被打包),因为tomcat会提供,故scope取值为provided.

Maven中依赖的scope的依赖范围

 Maven中依赖的scope的依赖范围

mavenDemo进行打包操作,查看war包内应该有所有的jar,还是18jar包,没有servlet-api-2.5.jar,可见编译时会可见,但是不会被打包。

 Maven中依赖的scope的依赖范围

3. test编译时不需要、测试时需要、运行时不需要(不会被打包),例如junit包

【示例】导入junitjar

Maven中依赖的scope的依赖范围

 Maven中依赖的scope的依赖范围

mavenDemo3进行打包package的操作,发现junit包并没有被打包:

Maven中依赖的scope的依赖范围

 

 

4.runtime: 编译不需要,测试时需要,运行时需要(会被打包),例如:jdbc驱动

Maven中依赖的scope的依赖范围

 Maven中依赖的scope的依赖范围Maven中依赖的scope的依赖范围

mavenDemo进行打包package的操作,发现mysql包有被打包:

Maven中依赖的scope的依赖范围

5. system:一个jar包如果是在本地,不在maven仓库内,那么scope的取值为system.编译时需要,测试时需要,运行时不需要(不会被打包)。例如:oracle的驱动包,从*仓库无法下载,需要先下载到本地,再通过本地路径引入。

先下载orace的包到本地:

 Maven中依赖的scope的依赖范围

然后添加该jar包的依赖:

Maven中依赖的scope的依赖范围

也可以jar包上传到本地仓库,通过坐标查找(推荐),步骤如下:

选择项目右键import-->Install or deploy an artifact to a Manve repository.

 Maven中依赖的scope的依赖范围

 Maven中依赖的scope的依赖范围

然后添加该jar包的依赖:

Maven中依赖的scope的依赖范围