scope maven中scope的默认值是compileweb
scope的分类oracle
1)compile 默认是compile。compile表示被依赖项目须要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候一般须要包含进去。maven
2)test 表示依赖项目仅仅参与测试相关的工做,包括测试代码的编译,执行。比较典型的如junitide
3)runtime 表示被依赖项目无需参与项目的编译,不事后期的测试和运行周期须要其参与。与compile相比,跳过编译而已。在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSRXXX的实现,对应的API jar是compile,具体实现是runtime的,compile只须要知道接口就足够了。oracle jdbc驱动jar包就是一个很好的例子,通常scope为runtime。 另runtime的依赖一般和optional搭配使用,optional为true。便可以用A实现也能够用B实现。测试
4)procided 意味着打包的时候能够不用包进去,别的设施(web container)会提供。事实上该依赖理论上能够参与编译、测试、运行等周期。至关于compile,可是打包阶段作了exclude的动做。spa
5)system 和provide相同,不过被依赖项不会从maven仓库抓,而是从本地系统文件拿,必定要配合systemPath使用rest
systempathcode
当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径blog
参考:接口
<dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> <version>1.5</version> <scope>system</scope> <systemPath>${basedir}/WebContent/WEB-INF/lib/hamcrest-core-1.3.jar</systemPath> </dependency>