maven中依赖范围简单解释
2017-05-16 11:50
155 查看
首先需要知道,maven在编译项目主代码的时候需要使用一套classpath,
其次,maven在编译和执行测试的时候会使用另外一套classpath,junit就是一个很好的例子;
最后,在实际运行maven项目的时候,又会使用一套classpath。
依赖范围就是用来控制依赖这三种classpath的关系,maven有以下集中依赖范围:
1):compile
编译以来范围,如果没有制定,就会默认使用该依赖范围。使用此依赖范围的maven依赖,对于编译,测试,运行三种classpath都有效。
典型的例子就是spring-core,在编译,测试和运行的时候都需要用到该依赖。
2):test
测试依赖范围。使用此依赖范围,只对测试classpath有效,在编译主代码或者运行项目时将无法使用此类依赖。典型的例子
就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
3):provided
已提供依赖范围。使用此依赖,对于编译和测试classpath有效,但在运行时就无效。典型的例子就是servlet-api,编译和测试项目的时候需要
该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复的引入一边。
4):runtime
运行时依赖范围,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子就是jdbc驱动实现,项目主代码的编译只需要jdk提供的
jdbc借口,只有在执行测试或者运行项目的时候才需要实现上述借口的具体jdbc驱动。
5):system
系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一直,但是使用system依赖范围的依赖时必须通过systemPath元素、
显式的制定依赖文件的路径。由于此依赖不是通过maven仓库解析的,而且与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
systemPath元素可以引用环境变量,如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
其次,maven在编译和执行测试的时候会使用另外一套classpath,junit就是一个很好的例子;
最后,在实际运行maven项目的时候,又会使用一套classpath。
依赖范围就是用来控制依赖这三种classpath的关系,maven有以下集中依赖范围:
1):compile
编译以来范围,如果没有制定,就会默认使用该依赖范围。使用此依赖范围的maven依赖,对于编译,测试,运行三种classpath都有效。
典型的例子就是spring-core,在编译,测试和运行的时候都需要用到该依赖。
2):test
测试依赖范围。使用此依赖范围,只对测试classpath有效,在编译主代码或者运行项目时将无法使用此类依赖。典型的例子
就是JUnit,它只有在编译测试代码及运行测试的时候才需要。
3):provided
已提供依赖范围。使用此依赖,对于编译和测试classpath有效,但在运行时就无效。典型的例子就是servlet-api,编译和测试项目的时候需要
该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复的引入一边。
4):runtime
运行时依赖范围,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子就是jdbc驱动实现,项目主代码的编译只需要jdk提供的
jdbc借口,只有在执行测试或者运行项目的时候才需要实现上述借口的具体jdbc驱动。
5):system
系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一直,但是使用system依赖范围的依赖时必须通过systemPath元素、
显式的制定依赖文件的路径。由于此依赖不是通过maven仓库解析的,而且与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。
systemPath元素可以引用环境变量,如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
相关文章推荐
- maven依赖范围的解释
- maven的依赖范围(转载)
- Maven&nbsp;基础之依赖范围
- maven的依赖范围
- maven的依赖范围scope
- maven中scope依赖范围与classpath的关系
- Maven依赖范围
- Maven中依赖的scope的依赖范围
- maven&gradle 依赖指定版本范围或者最新版本
- Maven依赖范围及传递
- 【Maven实战】依赖的范围
- maven3实战之坐标和依赖(依赖范围)
- 在使用反射时,maven设置依赖范围引起的异常
- maven依赖范围
- maven之依赖范围
- maven 中的依赖范围与classpath的关系
- maven读书笔记(二)maven依赖范围
- Maven依赖范围
- Maven的依赖范围
- 构件工具Maven----坐标、依赖、仓库、生命周期的简单学习