-
compile:默认值,适用于所有阶段(开发、测试、部署、运行),本jar会一直存在所有阶段。
-
provided:只在开发、测试阶段使用,目的是不让Servlet容器和你本地仓库的jar包冲突 ,告诉maven这个jar包未来在我的服务器中有,不需要将它打包在工程中;实际项目打包的时候,lib文件夹里面maven导入的provided包(jar包)都没有。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api。
-
runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段。
-
test:只在测试时使用,用于编译和运行测试代码。不会随项目发布。
-
system:(类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它)系统范围,与provided类似,只是标记为该scope的依赖包需要明确指定基于文件系统的jar包路径。因为需要通过systemPath指定本地jar文件路径,所以该scope是不推荐的。如果是基于组织的,一般会建立本地镜像,会把本地的或组织的基础组件加入本地镜像管理,避过使用该scope的情况
-
作用域表:
-
依赖范围 对于编译classpath有效 对于test classpath有效 对于运行时classpath 例子 compile Y Y Y spring-core provided Y Y ervlet-api runtime Y Y jdbc驱动 test Y junit system Y Y 本地maven仓库之外的类库