dependencyManagement

dependencyManagement 和 dependencies 区别

dependencyManagement:

只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本

dependencies:

相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
原来dependencyManagement 只是申明依赖,并不实现引入。问题就在这里了,把依赖放到dependencies里面

1.在同一个pom文件下,如果中都对该jar做了依赖,以的为准,优先级高于。若前者没有对其依赖,而后者对其有依赖,则以后者为准。里只是声明依赖,并不实现引入.

2.在不同的pom文件中,存在父子相互依赖关系的,父项目的pom中中对该jar做了依赖,而子项目中又依赖了该jar,如果子项目中没有指定,则继承父项目中该jar的。如果子项目中指定了,以子项目的为准。

引入SpringBoot的两种方法

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.4.RELEASE
         
    
    
        
            
                
                org.springframework.boot
                spring-boot-dependencies
                2.0.4.RELEASE
                pom
                import
            
        
    

demo0

简单分析一下,最外层是pf-login,下面有client、server、dao三个模块:
①、client模块用于注册服务,提供服务的调用接口,是调用login服务的入口。
②、server模块用于处理业务逻辑。
③、dao模块用于数据持久,和数据库打交道。
我们还可以加一些其他的模块,比如common,base之类的用来存放公共工具等等。
模块间的依赖关系:client 依赖 server ,server 依赖 dao。

1、pf-login的pom.xml(最外层,也是父目录)



    4.0.0
 
    cn.pw
    pf-login
    1.0-SNAPSHOT
    pom
    
        UTF-8
        UTF-8
        1.8
        Dalston.SR4
        1.2.15
    
    
        org.springframework.boot
        spring-boot-starter-parent
        1.5.8.RELEASE
         
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
        
            org.springframework.boot
            spring-boot-starter-test
        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            com.alibaba
            fastjson
            ${fastjson-version}
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
        
    
    
        pf-login-client
        pf-login-dao
        pf-login-server
    


所有关于pf-login模块的依赖都统一写在了这里 ,为了方便管理和避免重复依赖。与之前略有不同的是,我们加入了数据库的依赖组件,jpa和mysql。
我们也注意到了pom中引入了阿里巴巴的fastjson,这个与其他依赖写法不同,也就 证明SpringBoot是支持第三方依赖,也支持自定义依赖的。
是多模块项目的关键,模块简的关系正是通过父pom添加,子pom添加来建立的。

2、pf-login-client的pom.xml



    4.0.0
    
        cn.pw
        pf-login
        1.0-SNAPSHOT
    
 
    pf-login-client
    pf-login-client
    
        
            cn.pw
            pf-login-server
            1.0-SNAPSHOT
        
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
      

上面我们设计了client 依赖 server,所以pom中添加了对 server的dependency。

3、pf-login-server的pom.xml



    4.0.0
    
        cn.pw
        pf-login
        1.0-SNAPSHOT
    
 
    pf-login-server
    
        
            cn.pw
            pf-login-dao
            1.0-SNAPSHOT
        
    
  

4、pf-login-dao的pom.xml



    4.0.0
    
        cn.pw
        pf-login
        1.0-SNAPSHOT
    
 
    pf-login-dao
 

demo1

parent


    4.0.0

    com.demo
    demo-parent
    0.0.1-SNAPSHOT
    pom

    demo-parent
    Demo project for Spring Boot

    
    
        
        
        
        
    

    
        demo-apply
        demo-common
        demo-static
    

    
        UTF-8
        UTF-8
        1.8
    




    
        
            org.springframework.boot
            spring-boot-dependencies
            1.5.1.RELEASE
            pom
            import
        
    


    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    ${java.version}
                    ${java.version}
                
            
        
    



children


    4.0.0

    demo-apply
    jar

    demo-apply
    Demo project for Spring Boot

    
        com.demo
        demo-parent
        0.0.1-SNAPSHOT
        ../pom.xml
    

    
        
        
            com.demo
            demo-common
            0.0.1-SNAPSHOT
        
        
            com.demo
            demo-static
            0.0.1-SNAPSHOT
            war
        

        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-web
        

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

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                
                    
                    com.demo.demoapply.DemoApplyApplication
                    ZIP
                
                
                    
                        
                            repackage
                        
                    
                
            
        
    



demo2

当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
由于我们的模块很多,所以我们又抽象了一层,如下图抽出一个femicro来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

本项目中,父类 femicro pom中dependencyManagement配置

    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.M8
                pom
                import
            
            
                com.alibaba
                fastjson
                1.2.33
            
            
                com.alibaba
                druid
                1.0.11
            
        
    



    4.0.0
    
        io.fredia
        femicro
        1.0.0-SNAPSHOT
    
    femicro-cache
    femicro-cache
    http://maven.apache.org
    
        
            org.springframework.boot
            spring-boot-starter-aop
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            redis.clients
            jedis
        
        
            com.alibaba
            fastjson
        
        
            org.apache.commons
            commons-lang3
        
        
            joda-time
            joda-time
        
        
            javax.servlet
            javax.servlet-api
        
        
        
            org.slf4j
            log4j-over-slf4j
            1.7.7
        
    

你可能感兴趣的:(dependencyManagement)