1Dependency中 Scope 的作用
用来限制Dependency的作用范围的, 影响maven项目在各个生命周期时导入的package的状态。
- compile
默认的scope,范围指的是编译范围有效,在编译和打包时都会将依赖存储进去。而且,这些dependencies 会传递到依赖的项目中。 - provided
跟compile相似,但是表明了dependency 由JDK或者容器提供,在编译和测试的过程有效,最后生成war包时不会加入,同时没有传递性。诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突 。 - test
指的是测试范围有效,在编译和打包时都不会使用这个依赖。 - runtime
在运行的时候依赖,在编译的时候不依赖 。
2.关于依赖传递性
A,B,C三个项目的依赖关系:A-B-C 。A为工具类JAR包,B为业务类JAR包,C为对外的发布包War。
- 因为依赖传递性,C虽然同时使用A和B的jar包,但是在POM文件配置只需要设置依赖B(B也依赖A)。
- 因为依赖传递性,如果A包发生变化后,只需要installA包,B包不需要也install。
3. 实际上遇到的情况
servlet-api 包因为使用provided,无法进行依赖传递,因此每个包都需要设置此依赖。