关于maven依赖范围的个人理解
2017-01-07 19:06
190 查看
pom文件中有个元素是scope 表示构建的依赖范围
<maven 实战>这本书原文片段是如下:
首先需要知道,Maven在编译项目主代码的时候需要使用一套classpath. 在执行测试的时候会使用另外一套classpath.实际运行Maven项目的时候,又会使用一套classpath
我的理解是,maven在编译项目代码的时候 会根据scope 编译需要引入的构件. 比如scope的值为test,那么在编译主项目代码的时候是不会引入该构件值的.
Maven 与以下几种依赖范围:
compile:编译依赖范围.如果没有指定scope的值,就会默认使用该依赖范围.使用此依赖范围,在编译,测试,和运行的时候都会引用该构件
test:测试依赖范围.只有在使用maven执行测试的时候才会引用该构件.在编译主代码或者运行项目的时候都不会引用该构件.典型的例子是JUnit,它只有在编译测试代码及运行 测试的时候才需要.
provided:已提供依赖范围.在编译主项目代码和使用maven进行测试的时候会引用该构件.但在运行时无效.典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运 行项目的时候,由于容易已经提供,就不需要Maven重复地引入一遍.
runtime:运行时依赖范围.使用maven进行测试 和 运行项目的时候会引入该构件.在编译主代码是无效.典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供JDBC接口, 只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动.
system:系统依赖范围.和provided是效果一样.但是使用system范围的依赖必须通过systemPath元素显示的指定依赖文件的路径.由于此类依赖不是通过Maven仓库解析的,而且
往往与本机系统绑定,可能造成构件的不可移值.systemPath元素可以使用环境变量,如:
<dependecy>
<groupId>java.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
import(Maven2.0.9及以上):导入依赖范围.在编译项目主代码,测试 和 运行的时候都不会引入该构件.
<maven 实战>这本书原文片段是如下:
首先需要知道,Maven在编译项目主代码的时候需要使用一套classpath. 在执行测试的时候会使用另外一套classpath.实际运行Maven项目的时候,又会使用一套classpath
我的理解是,maven在编译项目代码的时候 会根据scope 编译需要引入的构件. 比如scope的值为test,那么在编译主项目代码的时候是不会引入该构件值的.
Maven 与以下几种依赖范围:
compile:编译依赖范围.如果没有指定scope的值,就会默认使用该依赖范围.使用此依赖范围,在编译,测试,和运行的时候都会引用该构件
test:测试依赖范围.只有在使用maven执行测试的时候才会引用该构件.在编译主代码或者运行项目的时候都不会引用该构件.典型的例子是JUnit,它只有在编译测试代码及运行 测试的时候才需要.
provided:已提供依赖范围.在编译主项目代码和使用maven进行测试的时候会引用该构件.但在运行时无效.典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运 行项目的时候,由于容易已经提供,就不需要Maven重复地引入一遍.
runtime:运行时依赖范围.使用maven进行测试 和 运行项目的时候会引入该构件.在编译主代码是无效.典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供JDBC接口, 只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动.
system:系统依赖范围.和provided是效果一样.但是使用system范围的依赖必须通过systemPath元素显示的指定依赖文件的路径.由于此类依赖不是通过Maven仓库解析的,而且
往往与本机系统绑定,可能造成构件的不可移值.systemPath元素可以使用环境变量,如:
<dependecy>
<groupId>java.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
import(Maven2.0.9及以上):导入依赖范围.在编译项目主代码,测试 和 运行的时候都不会引入该构件.
相关文章推荐
- 关于maven项目中pom.xml依赖的scope的作用范围
- Maven之依赖配置-关于依赖传递、依赖范围和类加载器
- 关于作用域的范围的个人理解
- 关于技术美术的一些个人理解
- 关于位域个人理解
- 关于CLASSPATH的个人理解
- 关于学好J2SE有啥用的个人理解
- 关于DataRow和DataColumn的一点个人简单理解-.NET教程,数据库应用
- 关于前篇提到的几个疑问的个人理解
- 关于DataRow和DataColumn的一点个人简单理解
- 个人关于“this”关键字的理解
- 关于service (依赖于dao) 理解下面的内容!! 重点
- 关于IoC(控制反转,依赖注入)的理解
- ASP.NET MVC关于验证的个人理解
- 理解矩阵(个人认为这是关于矩阵最精彩的理解,推荐~~)
- 关于rollup,cube,grouping sets的个人理解
- Spring特点中关于DI,IOC及AOP的个人理解
- 关于KMP算法的一点个人理解
- 关于MTS和COM+的区别.(个人理解dotnet是windows DNA和com+的延续,那么MTS应该逐渐退出舞台了)
- Spring特点中关于DI,IOC及AOP的个人理解