springCloud中dependencyManagement、type、scope在父模块和子模块分别的作用

springCloud中dependencyManagement、type、scope在父模块和子模块分别的作用

Spring Cloud项目一般会搭建为Mavne多模块项目,常见到dependencyManagement,存在两种情况
一、在父项目中的dependencyManagement,它是对所依赖jar包进行声明依赖,继承该父项目的子项目,不会直接引入dependencyManagement管理的jar包。因此子项目需要显式的声明需要用的依赖,并且没有指定version,才会从父项目中继承该依赖,这时version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本.;如果不在子项目中声明依赖,是不会从父项目中继承下来的;
而不包含在dependencyManagement中的dependencies中的依赖,即使在子项目中不写该依赖项,仍然会从父项目中继承该依赖项(全部继承)



   
       org.springframework.boot
       spring-boot-devtools
       runtime
       true
   
   
       org.projectlombok
       lombok
       true
   




   
       
           org.mybatis.spring.boot
           mybatis-spring-boot-starter
           2.1.3
       
   

二、子项目自身使用dependencyManagement,
注意:此处 dependencyManagement 不是版本管理,而是导入多个父模块
这样的用法必须在当前pom中使用dependencyManagement 标签,并且添加上

pomimport标签

这是为了解决maven 单继承的问题,使用这种方式,子模块不仅可以继承parent标签中的模块,也可以继承dependencyManagement中的其它模块,如下



    org.springframework.boot
    spring-boot-starter-parent
    1.5.4.RELEASE
    


   
       
           org.springframework.boot
           spring-boot-dependencies
           1.5.4.RELEASE
           pom
           import
       
       
           org.springframework.cloud
           spring-cloud-dependencies
           Dalston.SR1
           pom
           import
       
   

如果大家不知道spring-cloud的版本如何选择,可以参考这位哥们的
SpringBoot与SpringCloud的版本对应详细版
另外:maven依赖中的scope选项有
compile(默认选项):表示为当前依赖参与项目的编译、测试和运行阶段,scope的默认选项。


    org.springframework.cloud
    spring-cloud-dependencies

test :表示为当前依赖只参与测试阶段。


    org.springframework.boot
    spring-boot-starter-test
    test

runtime :表示为当前依赖只参与运行阶段,一般这种类库都是接口与实现相分离的类库,如mysql的驱动包。


     mysql
     mysql-connector-java
     runtime

privided :表示为当前依赖在打包过程中,不需要打进去,需要由运行的环境来提供,比如tomcat或者基础类库,如a依赖于b和c,bc中都包含gson依赖(privided),则a中不会依赖bc中的gson,需由a自行引入gson依赖。


    com.google.code.gson
    gson
    provided

system :表示为当前依赖不从maven仓库获取,从本地系统获取,结合systempath使用,常用于无法从maven仓库获取的包。


   com.supermap
   data
   1.0
   system
   
        ${project.basedir}/src/main/resources/supermap/com.supermap.data.jar
   

import :表示为当前项目依赖为多继承关系,常用于项目中自定义父工程,需要注意的是只能用在dependencyManagement里面,且仅用于type=pom的dependency。


    
        
            org.springframework.cloud
            spring-cloud-dependencies
            ${spring-cloud.version}
            pom
            import
        
        
            org.springframework.boot
            spring-boot-starter-parent
            ${spring-boot.version}
            pom
            import
        
    

你可能感兴趣的:(springCloud中dependencyManagement、type、scope在父模块和子模块分别的作用)