关于maven依赖范围的个人理解

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及以上):导入依赖范围.在编译项目主代码,测试  和 运行的时候都不会引入该构件.

    

   

    


       

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值