灰气球

灰气球

Maven pom.xml文件中<dependency>元素的<scope>标签

38
2024-04-12

简述

Maven的pom.xml文件中,元素的标签定义了该依赖的范围。这个范围决定了依赖的生命周期、是否会被打包进最终的构建产物(如JAR、WAR),以及在哪些classpath下该依赖是可见的。
以下是Maven中常见的依赖范围(scope):

compile(默认范围)

  • 编译范围的依赖在项目的classpath下可用,并且它们会被包含在最终构建的产物中(如JAR、WAR)。
  • 这是最常见的范围,也是默认范围,如果你没有指定标签,那么依赖的范围就是compile。

provided

  • 这种范围的依赖在编译和测试classpath下可用,但不会被包含在最终构建的产物中。
  • 这通常用于那些由JDK或容器(如Servlet容器)提供的库。例如,在Java EE项目中,Servlet API通常设置为provided范围,因为Servlet容器会提供这个API。

runtime

  • 这种范围的依赖在测试和运行时classpath下可用,但不会在编译时classpath下可用。
  • 这通常用于那些编译时不需要,但运行时需要的库。

test

  • 这种范围的依赖只在测试classpath下可用,并且不会被包含在最终构建的产物中。
  • 这通常用于测试框架和测试库。

system

  • 这种范围的依赖与provided类似,但你需要通过标签指定依赖的路径。
  • 这通常不推荐使用,因为它使得构建与特定的系统环境紧密耦合。

import

  • 这种范围仅用于部分,允许你从另一个POM中导入依赖管理。
  • 这对于多模块项目或继承项目非常有用,可以确保所有模块使用相同版本的依赖。