引入依赖范围的原因示例:
1 例如Junit,将Junit的jar包打包到发布包是没有必要的。
2 例如servlet-api,为了编译通过,我们引入servlet-api jar包;但因为web容器也会提供servlet-api,如果将servlet-api打包至WAR包,就会造成依赖冲突。
示例:
junit junit4.4 test javax.servlet servlet-api3.1 provided
scope详解:
1 complie
默认值。参与当前项目的编译,后续的测试,运行,是一个比较强的依赖。
2 test
参与包括测试代码的编译,执行。比较典型的如junit。
3 runtime
被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。
与compile相比,跳过编译而已.
oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常 和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
4 provided
打包的时候不包进去,别的设施(如Web Container)会提供。
事实上该依赖理论上可以参与编译,测试,运行等周期。
相当于compile,但是在打包阶段做了exclude的动作。
依赖范围及作用
| 依赖范围(scope) | 主源码classpath可用 | 测试源码classpath可用 | 会被打包 |
| compile 缺省值 | TRUE | TRUE | TRUE |
| test | FALSE | TRUE | FALSE |
| runtime | FALSE | TRUE | TRUE |
| provided | TRUE(外界提供) | TRUE | FALSE |



