随手记:maven引入jar包的传递依赖查看

场景重现
今天在做一个压测的时候使用线程池,写了如下代码时,所遇到的

private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-pool-%d").build();

发现pom文件中缺少了ThreadFactoryBuilder对象的依赖。
一查它的包是

package com.google.common.util.concurrent;

对应maven依赖的jar包是

Maven: com.google.guava:guava:16.0.1

所以我就想,只要把对应dependency添加进pom文件就好了。
不过当时也是想着偷懒,就去找了之前做过的项目,看有没有直接可以copy的dependency。
结果搜了3个关键词(“common”、“google”、“guava”)都没找到。
这就让我感到十分纳闷,那么这个jar包之前究竟是包含在哪个依赖当中呢。

maven引入jar包的传递依赖的查看方法
在pom文件的目录下执行一下命令

mvn dependency:tree -Dverbose

其中-Dverbose 参数可以不加,如果加了则可以列出更详细的信息。下面展示guava相关的输出内容,每行都是一个jar包,根据缩进可以看到依赖的关系

[INFO] +- cn.afterturn:easypoi-base:jar:3.1.0:compile
[INFO] |  +- org.apache.poi:poi-ooxml-schemas:jar:3.15:compile
[INFO] |  |  \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
[INFO] |  |     \- stax:stax-api:jar:1.0.1:compile
[INFO] |  +- com.google.guava:guava:jar:16.0.1:compile
[INFO] |  \- javax.validation:validation-api:jar:2.0.1.Final:compile

原来是包含在easypoi-base的依赖中了。但是我做压测又的确用不到,所以最后还是只能老老实实去maven仓库找依赖了。。。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>16.0.1</version>
</dependency>

最后,如果嫌dependency:tree打印的内容过多,也可以导出到文件中查看

mvn dependency:tree -Dverbose > tree.txt

其他相关:
执行mvn dependency:tree -Dverbose后打印出来的内容,常被用作处理jar包之间冲突所用。

  • 最后写着compile的就是编译成功的。
  • 最后写着omitted for duplicate的就是有jar包被重复依赖了,但是jar包的版本是一样的。
  • 最后写着omitted for conflict with xxxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。

该命令可配合-Dincludes和-Dexcludes进行使用,只输出自己感兴趣/不感兴趣的JAR
参数格式为:[groupId]:[artifactId]:[type]:[version]
每个部分(冒号分割的部分)是支持*通配符的,如果要指定多个格式则可以用,分割,如:

mvn dependency:tree -Dincludes=com.google.*

冲突解决:
解决冲突的策略是:就近原则,即离根近的依赖被采纳

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>dubbo</artifactId>
  <version>2.8.3.2</version>
  <exclusions>
      <exclusion>
          <artifactId>guava</artifactId>
          <groupId>com.google.guava</groupId>
      </exclusion>
      <exclusion>
          <artifactId>spring</artifactId>
          <groupId>org.springframework</groupId>
      </exclusion>    
  </exclusions>
</dependency>

--------------------------------------------------华丽的分割线--------------------------------------------------------------


文笔不好,望见谅! ^ _ ^
如有任何问题或者意见,欢迎留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值