Maven Scope作用域和依赖关系传递

  • Maven的scope依赖作用域说明

     1、test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
     
     2、compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
     
     3、provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突 
     
     4、runtime在运行的时候依赖,在编译的时候不依赖 
     5、 system 从本地系统引入Jar
     
     默认的依赖范围是compile 
    
  • 依赖的传递:

    作用域是test的包不会传递到引用这个项目的其它项目,但如果不是test会传递依赖到其它项目。

     如:项目A中有一个依赖包junit4.10,它的作用域是test
     
     现在有一个项目B,引用项目A,如果项目B要使用junit4.10就必须自己重新定义依赖关系。【因为不会传递依赖,所以不会从项目A中得到】
     
     但:如果作用域是其它的,不是test
     
     那么项目B可以直接使用不用自己再定义一个依赖关系。【因为会从项目A中自动传递依赖,而得到】
    
  • optional的用法


    当project-A 依赖project-B,  project-B 依赖project-D时
    <dependency>
      <groupId>sample.ProjectD</groupId>
      <artifactId>ProjectD</artifactId>
      <version>1.0-SNAPSHOT</version>
      <optional>true</optional>
    </dependency>
    所以当project-B的<optional>true</optional>时, project-A中如果没有显式的引入project-D, 则project-A不依赖project-D, 即project-A可以自己选择是否依赖project-D
    默认<optional>的值为false, 及子项目必须依赖

猜你喜欢

转载自blog.csdn.net/u011943534/article/details/82890620
今日推荐