本文,未全部做测试,如有错漏,求求各位指出!
| 使用时的区别,关注点:
|
compile (编译) | 默认 编程的时候,True 测试时,True 打包后,True 运行时,True |
provided (已提供) | 编程的时候,True 测试时,True 打包后,Flase 运行时,True
说明: 可以看到打包的时候,这个包不在war包内 实际是外部容器(如tomcat)拥有一毛一样的,不需要重复 排除后可以预防和容器内的jar版本冲突 |
runtime (运行时) | 编程的时候,False(不能引用jar里的类) 测试时,False(同编程说明) 打包后,True 运行时,True
说明: 编译和测试的时候都没有用到,但运行的时候却存在着,并参与到了执行, 这里比较合适的场景是涉及到SPI(java SPI机制不了解的还请百度下吧,多学点有好处的) 由系统或自己定义的其他包中的接口,尚且没有实现类。限制编程的时候不让拿到这个包里的impl这种实现类直接操作,只能用接口执行 也就解释成:运行时可用,编程时不让用 个人补充:强制多态,不让直接用实现类,可反射的方式 |
test (测试) | 编程的时候,False 测试时,True 打包后,False 运行时,False
说明:测试的时候用一下,略 |
system (系统) | 类似provided,不常用(你要 用到就再百度下)
<systemPath>${java.home}/../lib/tools.jar</systemPath>
|
import(导入) | 父pom下才会使用到(可以百度下面这个标签怎么用) 标签<dependencyManagement> 统一管理子pom的版本是的一种方式 |