scope的参数
- compile
默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去 - provided
打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作 - runtime
表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段 - test
依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit - system
从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
几种标签的作用域
1.compile
-
导入的jar对主程序是否有效:有效
-
导入的jar对测试程序是否有效:有效
-
是否参与项目的打包:参与
-
例如:在maven项目中使用了sping等第三方的jar包,则需要一同打包再部署到服务器。
2.test
-
导入的jar对主程序是否有效:无效
-
导入的jar对测试程序是否有效:有效
-
是否参与项目的打包:参与
-
例如:junit包,只在开发中测试使用,并不需要打包到服务器。
-
注:在eclipse中,若的取值若为test,则在右侧目录中,包会显示为灰色。如下图:
3、provided -
导入的jar对主程序是否有效:有效
-
导入的jar对测试程序是否有效:有效
-
是否参与项目打包:不参与
-
例如:servlet-api,tomcat服务器自带,会自动添加到你部署的项目中,你开发项目时要用,但是不需要一起打包。
依赖传递
简单的说就是A依赖B,B依赖C,所以A也会依赖C。这时,如果C中有依赖的scope是provided,则这个依赖不会传递到B,A,若C的依赖的scope是compile,则会向下传递。
只有当依赖的scope标签被定义为compile时才会发生依赖传递,而定义为test或者provided都不会发生依赖传递。