Scope的分类
-
compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
-
test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
-
runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
-
provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
-
system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
通过maven引入的jar包,里面的类,都是已经编译好的字节码,跟runtime或者provided没关系。
简单来说,compile、runtime和provided的区别,需要在执行mvn package命令,且打包格式是war之类(而不是默认的jar)的时候才能看出来。
-
通过compile和provided引入的jar包,里面的类,你在项目中可以直接import进来用,编译没问题,
-
但是runtime引入的jar包中的类,项目代码里不能直接用,用了无法通过编译,只能通过反射之类的方式来用。
-
通过compile和runtime引入的jar包,会出现在你的项目war包里,而provided引入的jar包则不会。
举个例子:再父项目中引入依赖子项目继承(scope为runtime时项目中无法引入其中的类)
image.pngimage.png
网友评论