zoukankan      html  css  js  c++  java
  • maven依赖管理

    maven依赖管理

    1.依赖范围   (依赖相当于java中的import  是否需要导入别的jar包)

    使用控制依赖与三种classpath(编译期,测试时期,运行时期)的关系

     complie   在编译,测试,运行时期,a项目在编译期依赖b,并且在测试和运行时期也依赖b项目, (默认值)             会打jar包或者war包

    test    只在测试时有效,    a项目只在测试时依赖b项目,   不会打jwar包

    provided  在编译和测试是有效,在运行时不会打jar或war包

    runtime   会在测试时和运行时进行打包处理,(会打war包)

    2.依赖传递

    a----->b          第一关系:a依赖b    compile

    b----->c           第二关系:b依赖c complie

    1.纵坐标,  直接依赖

    a---->b   a依赖b   那么b就是a的直接依赖

    在a的pom.xml中添加b的坐标

    2横坐标,    传递依赖

    b----->c  b依赖c  那么c就是a的传递依赖

    3.中间依赖

    传递依赖的范围  a依赖c的范围

    3.依赖调节原则

    情景再现:
      项目 A 依赖于项目 B,项目 B 依赖于项目 C(v1), 项目 A 依赖于项目 D,项目 D
      依赖于项目 E,项目 E 依赖于 C(v2),
          1、A--->B---->C(v1) ,
          2、A------>D---->E----->C(v2)
      项目 A 隐形依赖了两个版本的 C,那到底采用哪个版本呢?

      依赖调节第一原则:    路径优先

        很明显,第一种路径深度是 3,第二种路径深度是 4,所以,maven 会采用 C(v1)

      依赖调节第二原则:    声明优先

        假设路径深度相等,那么声明在前的会被引用。

    4.版本锁定

    在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
    pom.xml 文件中,jar 的版本判断的两种途径
    1.   如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven
      就会倒 dependencyManagement 里面去找有没有对该 artifactId 和 groupId 进行过
      版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为 dependency
      声明一个 version。
    2.     如果 dependencies 中 的 dependency 声 明 了 version , 那 么 无 论
      dependencyManagement 中有无对该 jar 的 version 声明,都以 dependency 里的
      version 为准。

    5.排除依赖

      我们仔细观察 Maven Dependencies 下的 jar 包,会发现存在了两个 javassist
    包,一个是 javassist-3.18.1-GA. ,另一个是 javassist-3.11.0-GA 。这是因为我
    们引入三大框架的 jar 包,hibernate 依赖 javassist-3.18.1-GA ,而 struts 依赖
    javassist-3.11.0-GA 。这就是我们通常所说的 jar 包版本冲突,如果这两个 jar 包
    同时存在,会导致后续某些操作会存在问题(比如 openSessionInView 失效),
    所以需要排除低版本的 jar 包。
    如何来排除依赖呢?添加下面红色字体的部分。作用是排除 struts 中依赖的
    javassist 的 jar
    

      

    <dependency>
      <groupId>org.apache.struts</groupId>
      <artifactId>struts2-core</artifactId>
      <version>2.3.24</version>
      <exclusions>
        <exclusion>
          <groupId>javassist</groupId>
          <artifactId>javassist</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    

      添加后发现 javassist-3.11.0-GA 消失。

  • 相关阅读:
    C# 抽象(3)
    C# 抽象(2)
    C# 抽象
    将 varchar 值 'ACCE5057EC423F7C' 转换成数据类型 int 时失败
    处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表
    方法调用 Controller的Action 参数
    A problem has been detected and windows has been shut down to prevent damage to your computer.他么啥意思?看这里!【蓝屏】
    自己搭建了一个简单实用的Web版记事本
    GRPC
    Ocelot Consul
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/dependencyManagement.html
Copyright © 2011-2022 走看看