zoukankan      html  css  js  c++  java
  • 读书笔记-《Maven实战》-2018/5/3

    5.7依赖调解

    1.当一个项目有以下依赖关系的时候:A->B->C->X(1.0)、A->D->X(2.0),X作为A的传递依赖而拥有两个版本,Maven为了解决以上问题,制定了一下规则:

    Maven依赖调解第一原则:路径最近者优先。 即:第一条路径的路径长度为3,第二条路径的路径长度为2,则以X(2.0)会被解析使用

    Maven依赖调解第二原则:第一声明者优先。即:当两条路径长度相同的时候,在POM中依赖的顺序靠前的会被解析使用。

    2.当一个项目有一下依赖关系的时候:A->B、B->X(可选),B->Y(可选) 。根据传递性依赖的规定,如果这三个依赖范围都是compile的,那么A对于X,Y也是compile的,

    但是在这里,X,Y都是可选依赖,依赖将不会传递,也就是说,X,Y与A没有任何关系。

    使用<optional>声明可选依赖

    //<optional>默认为false,
    //当配置为true的时候,可以理解为表示依赖不向上传递

    需要说明的是,设计良好的项目是不应该有可选依赖的,在面向对象的设计中,根据单一职责性原则,一个类,模块应该只有一项职责。针对可选依赖,可以做出如下应对:

    对每个有可选依赖的模块单独划分为两个Maven项目,用户根据选择具体使用哪个模块。

    这样的好处:

    1.避免的可选依赖的不传递性,用户不用再单独的再项目中再次声明依赖

    2.符合单一职责原则,用户对他们的依赖的作用更加明确

     

    5.9 最佳实践

    1.排除依赖:

    当一个项目有一下依赖关系:A->B。但是A只是依赖于B的一部分的时候,有两种方式可以排除对B不需要的部分的传递的依赖:

    第一种方式为在B的pom中将B不需要的部分声明为<optional>true</optional>,即可选的,

    第二种方式为在A的pom中将B不需要的部分使用

    <exclusions>
        <exclusion>
           <groupId>x</groupId>
           <artifactId>x</artifactId>
        </exclusion>
        <exclusion>
           <groupId>y</groupId>
           <artifactId>y</artifactId>
        </exclusion>
    </exclusions>        

    类似以上的代码声明不需要依赖的B的依赖

    2.归类依赖:

    使用类似常量代替一类依赖的版本号。比如Spring Framework.这样当依赖升级的时候,只需要修改一处地方就行。

    <properties>
        <springframework.version>2.5.6</springframework.version>
    </properties>

    3.优化依赖

    使用

    mvn dependency:list

    查看当前已解析依赖

    使用

    mvn dependency:tree

    查看当前依赖树

    使用

    mvn dependency:analyze

    查看当前依赖的详细使用情况,

    值得注意的是dependency会:

    1.使用Used undeclared dependencies 指出当前未声明但是已经使用的依赖,对于这种依赖,我们应该显示声明它。

    2.使用Unused declared dependencies 指出当前已声明但是未使用的依赖,对于这种依赖,不能简单的直接删除。若需要直接删除,也必须小心测试后再删除

  • 相关阅读:
    程序是访问数据库的组件
    Mac搭建Vue
    Sharding-JDBC基本使用,整合Springboot实现分库分表,读写分离
    随意写写
    maven打包工具assembly打包本地jar的解决办法
    Go语言笔记 (2) 变量命名与多重赋值
    Go语言笔记(1)变量的定义与赋值
    c期末笔记(4)
    c期末笔记(3)
    c期末笔记(2)
  • 原文地址:https://www.cnblogs.com/dengchengchao/p/8985906.html
Copyright © 2011-2022 走看看