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

  • 相关阅读:
    Different AG groups have the exactly same group_id value if the group names are same and the ‘CLUSTER_TYPE = EXTERNAL/NONE’
    An example of polybase for Oracle
    use azure data studio to create external table for oracle
    Missing MSI and MSP files
    You may fail to backup log or restore log after TDE certification/key rotation.
    Password is required when adding a database to AG group if the database has a master key
    Use KTPASS instead of adden to configure mssql.keytab
    ardunio+舵机
    android webview 全屏100%显示图片
    glide 长方形图片显示圆角问题
  • 原文地址:https://www.cnblogs.com/LaiCuiTing/p/9542525.html
Copyright © 2011-2022 走看看