首先贴出maven依赖配置语法
spring-core
groupId,artifactId,version就不再介绍了,这是基本坐标。
type为依赖的类型,scope依赖的范围,optional标记依赖是否可选,exclusions用来排除传递性依赖。
基础概念如上,今天重点理解依赖的范围。
在maven构建的时候,会有三套classpath(就好比java的classpath)。在编译项目主代码的时候会用到一套classpath,在进行编译和测试的时候也会用到一套classpath,在真正运行的时候,也会用到一套classpath。
依赖的范围有以下几种:compile,test,provided,runtime,system,import。
其中system一般不推荐,因为从字面意思就可以了解到引用了系统的环境变量,所以很可能不具备可移植性。
compile是默认的依赖范围。在没有写scope的时候,就是指定了compile范围。
test,测试依赖范围。在我之前使用maven的时候,junit的scope就是test。
provided,已提供的依赖范围。此依赖在编译和测试classpath有效,在运行时无效。就行servlet api,编译的时候用到了,运行的时候就不需要了。
runtime,运行时依赖范围。此依赖在测试和运行的时候有效,但是在编译的时候无效。就像jdbc驱动,项目主代码的编译只需要提供jdk提供的jdbc驱动,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。
import,导入依赖范围。(暂时没学到)
scope | 编译 | 测试 | 运行 | example |
compile | Y | Y | Y | spring-core |
test | -- | Y | -- | JUnit |
provided | Y | Y | -- | servlet-api |
runtime | -- | Y | Y | JDBC驱动实现 |
system | Y | Y | -- | 本地的,maven仓库之外的类库文件 |