在Maven的依赖管理中.java
目前有6种类型的scope他们分别是,compile,provided, test,runtime,system,importspring
在详细介绍他们以前,首要要理解一下,maven世界中的3种classpath和2种source(resources)服务器
咱们都知道在maven的规范中,框架
要求咱们使用2个source 目录分别存放项目源代码和测试源代码。maven
要求咱们使用2个resource 目录分别存放项目源(配置)文件和测试(配置)文件。ide
|---src |---main |---java |---resources |---test |----java |----resources
固然了,不按照maven规定的默认路劲来摆放,也能够按照你本身一套来摆放。可是不是很建议这么作, 由于Maven默认的这2个路劲能够适用绝大多数的项目了,除非说你作构建的程序的目录层级结构很怪异,或者说 maven的这一套已经不适用了,那么能够本身定义了。可是无论你怎么定义,在maven的世界里面 就这2种类型的源代码路劲,好比说我能够这么定义:函数
/main/ejb/ ---> 放源代码 /main/jee/ ---> 放源代码 /main/mobile ---> 放源代码 /test/ejb/ ---> 放测试代码 /test/jee ---> 放测试代码 /test/mobile/ ---> 放测试代码
所谓配置文件,无非就是框架和规范要求使用的一些文件,好比说 log4j,hibernate jpa spring等的配置文件。固然了,和source 相似,你也能够不按照maven默认的路径来摆放。可是 也不是很建议这么作,理由同source单元测试
要注意的是,若是说你在源代码写了一段主函数 运行起来而且是须要加载这些配置文件的,那么这段程序是会在源代码目录里面和源配置文件目录里面去需找所须要的这些配置文件。除非说 你在加载这些文件的时候使用的是系统绝对路劲, 那么你就能够彻底忽略maven的规定了。也有一些框架 就是这么规定说,把log4j.properties放到哪里哪里,这个时候 就循序渐进吧,该放哪放哪了。测试
这个classpath 表示的是 在编译测试代码的时候使用的一个classpath,在编译测试源代码的时候,或者说 在执行单元测试(junit)的时候或者说执行测试源代码主函数的时候,会加载这个 test classpath,因此说,单元测试所须要加载的jar包之类的是须要放进这个classpath里面的spa
这个classpath 表示的是 在编译源代码的时候使用一个classpath, 在编译源代码的时候或者说执行源代码主函数的时候,会加载这个 compile classpath,因此说,源代码所须要加载的jar包之类的是须要放进这个classpath里面的,好比说你使用了hibernate这个框架来作数据存储,那么你须要把hiernate须要的一些包放到这个classpath中
package classpath 或者container classpath
这个classpath 表示的是 在打包的时候会这些classpath里面的jar包一同放到你所打的包里面了,好比说你打的包里面用到了spring,并且呢你部署的那个服务器上面的类库也没有spring,那么就须要把spring放到package的classpath
言归正传了,在maven依赖管理中,定义的scope其实就是告知maven 这个依赖是使用到哪一个classpath中。
其中 compile 是maven默认的一个scope。
其中须要注意的是provide和system虽然范围同样,可是 system表示的使用本地非仓库的依赖包,须要额外定义一个systemPath的属性,告知jar包的路劲
Test Classpath | Compile Classpath | Package Classpath | |
compile | Y | Y | Y |
provided | Y | Y | |
test | Y | ||
runtime | Y | Y | |
system | Y | Y |
这是个用于maven 继承机制的的一个特殊的scope。