pom文件中<dependency>标签下<scope>标签的作用

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都不会发生依赖传递。

猜你喜欢

转载自blog.csdn.net/qq_35531985/article/details/108726344