zoukankan      html  css  js  c++  java
  • Maven学习归纳(四)——传递依赖和依赖的规则

    一、传递依赖

    官方文档解释的传送门:http://ifeve.com/maven-dependency-mechanism/

    当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗?

    例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 B.jar 呢?

    这要看传递依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问

    即 要使A.jar 依赖于C.jar 当且仅当C.jar的范围是compile


    如下演示HelloWrold2项目依赖 ——》HelloWrold项目依赖——》junit
    此时HelloWrold这个项目是有junit.jar包的,而HelloWrold2是没有junit这个jar包的,如下所示:

    需要在被依赖的项目HelloWorld的pom.xml上改写

    改写之后,项目就出现了需要间接依赖的的jar包

    二、依赖原则

    依赖原则目的:防止jar包的冲突

    为了避免造成依赖重复,需要选择一个依赖路径

    1. 路径最短优先原则

    存在两个项目依赖同个类型但不同版本的jar包,这个时候会优先选择路径短的

    项目配置情况:

    HelloWrold2 依赖 HelloWrold

    HelloWrold   依赖  Junit3.8 jar

    HelloWrold   依赖  Junit4.0 jar

    从图中看,显然junit3.8距离HelloWrold2更近点的

    既然都拥有junit这个包,那么原本是 3.8 的 HelloWrold2 再依赖了HelloWrold后,会发生什么情况呢??

    配置如下:

    运行结果如图所示:此时HelloWrold保持原来的junit-3.8.jar不变

    2. 路径长度相同

    路径长度相同的情况下,又可以分为是否有在同一个pom.xml两种情况

    2.1 覆盖:

    如果在同一pom.xml文件中有2个相同的依赖;后面声明的会覆盖前面的依赖

    但这里要说严禁使用本情况,严禁在同一个pom中声明两个不同的依赖

    2.2 优先:

    如果是在不同pom.xml中有2个相同的依赖;则先声明的依赖,会覆盖后面生命的依赖

    如下HelloWorld2依赖项目HelloWorld,和项目HelloWorld3

    HelloWorld与HelloWorld3都有不同版本的commons-fileupload.jar

    显然,先写在前面的HelloWorld3的jar包被采用了

    简单的依赖就完了呢~ o(* ̄▽ ̄*)o

  • 相关阅读:
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    一手遮天 Android
    springcloud-gateway整合Swagger聚合微服务系统API文档
    Gateway 其他配置
    Gateway Global Filters
    Gateway GatewayFilter Factories
    Gateway Route Predicate Factories
  • 原文地址:https://www.cnblogs.com/LaiCuiTing/p/9542525.html
Copyright © 2011-2022 走看看