1、传递性依赖

  传递性依赖也就是隐式依赖,可以极大的简化项目依赖的管理,但是也会导致一些难以排查的问题。

  如:当项目引入一个第三方依赖,由于某些原因,依赖了另外一个类库的SNAPSHOT版本,那么这个SNAPSHOT就会成为当前项目的传递性依赖,而SNAPSHOT依赖的不稳定性会直接影响大年的项目,此时需要手动排除该传递性依赖,并在当前项目中声明某个该类库的正式发布版本,或者是你直接想要替换某个传递性依赖。

  替换传递性依赖:<exclusions></ exclusions>

  

    上述图片,项目a依赖项目b,由于某些原因不想引入项目c,而自己显示声明多项目c1.1.0版本的依赖,逻辑图如下:

      

2、归类依赖

  简而言之,当我们依赖一整套组件时,如spring,我们通常是依赖他们各个组件的同一个版本,此时由于每个依赖都需要指定版本,重复性工作太多并且一旦依赖版本升级,修改也比较繁琐,所以通过归类,我们可以通过maven的properties属性,在一个位置指定具体版本,其他具体依赖直接获取这个属性即可。

  pom文件指定属性:

  

  pom文件具体依赖直接获取

    

3、优化依赖

  3.1、mvn  dependency:list :查看当前项目的已解析依赖

  3.2、mvn  dependency:tree :查看当前项目的依赖树

  3.3、mvn  dependency:analyze :分析当前项目的依赖

  这里会出现两种常见说明:

    Used undeclared dependencies found:未显示声明但已使用的依赖(传递性依赖)

    Unused delared dependencies found:已显示声明但未使用的依赖(由于此mvn命令只是分析主代码和测试类,并不全面,所以对于这条分析结果,需要自行排查此依赖

    是否真的没有用,再决定是否删除不可直接删除)

4、依赖冲突与解决

   依赖冲突解决资源来自:http://www.cnblogs.com/ygj0930/p/6628429.html 

 依赖冲突:一个项目A,通过不同依赖传递路径依赖于X,若在不同路径下传递过来的X版本不同,那么A应该导入哪个版本的X包呢?

    冲突解决方案:

    1:如果依赖路径的长度不同,则“短路优先”:

         A—>B—>C—>D—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则A依赖于X(version 0.0.2)。

     2:依赖路径长度相同情况下,则“先声明优先”:

         A—>E—>X(version 0.0.1)

         A—>F—>X(version 0.0.2)

         则在项目A的<depencies></depencies>中,E、F哪个在先则A依赖哪条路径的X。

posted on 2019-06-10 15:23  探路_先锋  阅读(170)  评论(0编辑  收藏  举报
……