Maven scope

说在最前面:理解事物需要看清它的边界。

dependency中的scope是用来指定依赖包的使用范围。

那么依赖包会在用在哪些地方呢?

  • 编译时(a)
  • 测试时(b)
  • 运行时(c)

那么对于依赖包的使用会有以下组合场景:

  1. abc
  2. a
  3. b
  4. c
  5. ab
  6. bc
  7. ac

因为测试环境的特殊性,只要在编译时和运行时用到的依赖包,它都会需要,那么a、c、ac组合不存在。还剩下:

  1. abc - compile
  2. b - test
  3. ab - provided
  4. bc - runtime

场景

  • compile 对应普通的情况。在编译、测试、运行中都需要用到。
  • runtime 对应只在运行时用到,而编译时用不到(测试还是可以用到的)。也就是在编译源码时,不会引用这个lib,其实也就是在说,在源码中不能有调用这个lib中的代码。但是,在打包时却要将该lib放在jar包中,这样运行时就可以使用该lib。适用于在Java中直接通过反射获取lib中类的方式。
  • provided 对应lib到在运行环境提供的场景。在编译时可以需要用到lib,但是在打包时却不将其放入jar包中。

根据依赖包的来源目前有两种:maven仓库、本地。maven还提供了一种system方式,可以通过路径依赖本地的包。但是本地包的路径在服务器中可能不存在,在maven的设计中system的功能和provided一样,不能进入运行时环境。

引用:
https://blog.csdn.net/claram/article/details/77646263
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

你可能感兴趣的:(Maven scope)