1、枚举各个属性值的含义
- compile,缺省值,适用于所有阶段,会打包进项目。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
2、其它类型的属性值都比较容易理解,这里重点比较一下compile和runtime之间的区别:
(1)先描述一个简单的例子:模块A依赖X,此时X的scope设置的值为runtime;
(2)另一模块B依赖A,则B在编译时不会依赖X(编译时不会有任何问题);
如果原先X的scope设置为compile,则说明在编译的时B需要显示的调用X的相关类,在maven依赖中最常见的设置为runtime的依赖是JDBC,主要原因是由于jdbc中对驱动类的配置是采用反射的机制在配置文件中配置了class-name;