美文网首页
Maven: Scope标签

Maven: Scope标签

作者: 综合楼 | 来源:发表于2020-08-16 22:54 被阅读0次

    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.png
    image.png

    相关文章

      网友评论

          本文标题:Maven: Scope标签

          本文链接:https://www.haomeiwen.com/subject/uioxjktx.html