既然,Maven的生命周期存在编译、测试、运行这些过程,那么显然有些依赖只用于测试,好比junit;有些依赖编译用不到,只有运行的时候才能用到,好比mysql的驱动包在编译期就用不到(编译期用的是JDBC接口),而是在运行时用到的;还有些依赖,编译期要用到,而运行期不须要提供,由于有些容器已经提供了,好比servlet-api在tomcat中已经提供了,咱们只须要的是编译期提供而已。
总结来讲:
compile:默认的scope,运行期有效,须要打入包中。
provided:编译期有效,运行期不须要提供,不会打入包中。
runtime:编译不须要,在运行期有效,须要导入包中。(接口与实现分离)
test:测试须要,不会打入包中。
system:非本地仓库引入、存在系统的某个路径下的jar。(通常不使用)mysql