Maven 依赖范围

依赖范围(scope) 对于主代码的有效性 对于测试代码的有效性 是否打包(对于运行时classpath的有效性) 例子
compile Y Y Y log4j
test N Y N junit
provided Y Y N servlet-api
runtime N N Y JDBC Driver Implementation

Maven因为执行一系列编译、测试和部署运行等操作,在不同的操作下使用的classpath不同,依赖范围就是用来控制依赖与三种 classpath(编译classpath、测试classpath、运行classpath)的关系

Maven有以下几种依赖范围:

  • compile:编译依赖范围(默认),使用此依赖范围对于编译、测试、运行三种 classpath 都有效,即在编译、测试和运行的时候都要使用该依赖jar包;
  • test:测试依赖范围,从字面意思就可以知道此依赖范围只能用于测试classpath,而在编译和运行项目时无法使用此类依赖,典型的是JUnit,它只用于编译测试代码和运行测试代码的时候才需要;
  • provided:此依赖范围,对于编译和测试classpath有效,而对运行时无效;
  • runtime:运行时依赖范围,对于测试和运行classpath有效,但是在编译主代码时无效,典型的就是JDBC驱动实现;
  • system:系统依赖范围,使用system范围的依赖时必须通过systemPath元素显示地指定依赖文件的路径,不依赖Maven仓库解析,所以可能会造成建构的不可移植,谨慎使用
panchaoxin wechat
关注我的公众号
支持一下