1. 当你把项目打成war包时
eg:以下面依赖为例:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
分析:
scope=provided,这个servlet-jar依赖(或者说 servlet-jar包),不会出现在WEB-INFO/lib目录下,即该servlet-jar依赖不会打进项目war中。
scope=compile,这个servlet-jar依赖(或者说 servlet-jar包) ,会放到WEB-INFO/lib目录,即该servlet-jar依赖会打进项目war中。
2.scope常用作用域
2.1 compile,缺省默认值,在所有阶段都需要,会打进项目war包。
2.2 runtime,运行和测试时需要,编译时不需要。如JDBC驱动,适用运行和测试阶段,会打进项目war包。
2.3 provided,编译时需要该依赖,不会打进项目war包。
例如, 如果你开发了一个web 应用,你可能在编译时需要Servlet.jar来编译一个servlet,但你不想在项目打成WAR的中包含这个Servlet.jar;多数情况下,这个Servlet.jar由你部署的应用服务器或容器提供。
2.4 test,只在测试时需要,用于编译和运行测试代码。不会打进项目war包。
2.5 system,需要显式提供依赖的jar包位置。不会打进项目war包。
(PS:Maven不会在仓库Repository中查找它,一般搭配systempath="你需要的本地系统中jar包的路径"一起使用,这么做是为了允许基于本地对象编译,而这些本地对象是系统类库的一部分。注意该范围是不推荐使用的,你应该一直尽量去从公共或定制的 Maven 仓库中引用所需依赖)。