zoukankan      html  css  js  c++  java
  • maven完整学习笔记(2)--- 依赖范围和依赖传递

    依赖基本配置

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    groupId、artifactId、version:基本坐标

    type:依赖类型,默认是jar,和定义时的packaging一致

    exclusions:排除某些依赖

    scope:依赖范围,默认是compile

    依赖范围

    依赖中的scope标签,取值为:compile、test、provided、runtime、system、import;每种取值对不同的阶段的classpath生效

    compile:默认值,对编译、运行、测试classpath有效

    test:对测试classpath有效

    provided:对编译、测试classpath有效,常见的例子是servlet-api

    runtime:对运行、测试classpath有效

    system:依赖范围和provided一致,不过需要指定路径依赖非maven方式,不常用

    import:后面和dependencyManagement一起说明

    依赖传递

    maven引入的依赖传递机制有如下好处:项目开发只需要关注直接依赖即可,不需要关注这些依赖会引入哪些间接依赖;但也会引入一些问题,如:

    A->B->D(2),A->C->D(1),那么A到底依赖的是D的哪个版本呢?

    maven对于相同的依赖会有如下的原则:

    1、路径最短原则

          A->B->C->G(2),  A->D->G(1), 那么A间接依赖的G版本为1

    2、路径长度相同时,以该依赖在pom中定义顺序为准,间接依赖先定义的

          A->B->D(1),A->C->D(2);在A的pom文件中,B的依赖在C的依赖之前,此时A依赖D的版本号为1

    3、第2个有特例,如果一个pom中对某个依赖声明了两次,那么最后的依赖会覆盖前面的依赖;当然,很少人这么做

    版本锁定原则

    通过dependencyManagement实现,dependencyManagement只是在父pom中声明了依赖及版本号,并不会真正引入依赖;而继承了父pom的pom文件只需注明groupId、artifactId即可,无需指定版本号;

    依赖范围的传递,后面讨论

    scope为import

    前面提到dependencyManagement用来声明依赖及版本号,而在dependencies中引入依赖;maven和java一样,是单继承的,即一个pom中只能有一个parent标签;

    如果项目很庞大,那就会导致父pom中的依赖非常多,并且只能通过注释来分类,有没有其他解决方案呢?依赖范围import就是为了解决这个问题的;

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    可以通过import引入spring-boot的依赖,注意使用import的前提是引入依赖的类型必须是pom并且要使用dependencyManagement标签

    spring-boot-dependencies依赖如下:

  • 相关阅读:
    (一)SpringCloud Alibaba Nacos服务注册和配置中心:Nacos简介
    (八)SpringCloud初级篇——Eureka服务注册与发现:服务发现Discovery
    (七)SpringCloud初级篇——Eureka服务注册与发现:actuator微服务信息完善
    (六)SpringCloud初级篇——Eureka服务注册与发现:集群Eureka构建步骤
    Windows系统修改Hosts文件
    (五)SpringCloud初级篇——Eureka服务注册与发现:单机Eureka构建步骤
    centos7 安装zookeeper
    热部署Devtools
    【阅读笔记】《C程序员 从校园到职场》第三章 程序的样式(版式和注释)
    【阅读笔记】《C程序员 从校园到职场》第二章 学校到职场
  • 原文地址:https://www.cnblogs.com/sniffs/p/12720667.html
Copyright © 2011-2022 走看看