maven依赖范围

563 阅读1分钟

一个例子

以servlet的maven依赖为例

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

这里的scope就是他的依赖范围,maven会根据时机去自动判断是否导入该jar包

scope参数

依赖范围编译有效测试有效运行有效例子
compileYYYspring-core
test-Y-Junit
providedYY-servlet-api
runtime-YYJDBC驱动
systemYY-本地的,Maven仓库之外的类库
  • compile编译、测试、运行,在编译时依赖,并且在测试和运行时也依赖
    例如: strus-core、spring-beans。打到war包或jar包
  • provided编译、和测试有效,在编译和测试时需要
    例如: servlet-api就是编译和测试有用,在运行时不用(tomcat容器已提供)不会打到war
  • runtime:测试、运行有效
    例如: jdbc驱动包,在开发代码中针对java的jdbc接口开发,编译不用在运行和测试时需要通过jdbc驱动包(mysq驱动)连接数据库,需要的会打到war
  • test:只是测试有效,只在单元测试类中用
    例如: junit
    不会打到war

按照依赖强度,由强到弱来排序:(理解)

compile>provided> runtime> test