Maven中scope的含义
Maven依赖中有个scope元素,控制依赖jar包的使用范围。用的不当,容易造成jar包冲突,程序异常等。通常有:compile、runtime、provided、test、system、import。
compile(编译):不指定时,默认。表示该依赖的jar包,参与编译、测试、打包、运行等阶段。
runtime(运行时):编译的时候不需要这个jar包,但是会参与项目的测试和运行,比如jdbc具体的实现类,常用的lombok都可以设置为runtime。
provided(已提供):被依赖项目理论上可以参与编译、测试、运行等阶段,相当于compile,但是再打包阶段做了exclude的动作。
适用场景:例如, 如果我们在开发一个web 应用,在编译时我们需要依赖 servlet-api.jar,但是在运行时我们不需要该 jar 包,因为这个 jar 包已由应用服务器提供,此时我们需要使用 provided 进行范围修饰。
test(测试):表示被依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。常见的Junit测试。
system(系统):ystem 元素与 provided 元素类似,但是被依赖项不会从 maven 仓库中查找,而是从本地系统中获取,systemPath 元素用于指定本地系统中 jar 文件的路径。
import(引用):一般应用于<dependencyManagement>
标签中,表示从其他的pom中导入依赖。
比如常见的springboot提供了依赖pom:
1 | <dependencyManagement> |
其中规定了各个依赖的版本,方便统一管理一个项目的组件版本,并且pom文件更加整洁,不容易出错。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 张国丰!
评论