场景重现:
今天在做一个压测的时候使用线程池,写了如下代码时,所遇到的
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>
--------------------------------------------------华丽的分割线--------------------------------------------------------------
文笔不好,望见谅! ^ _ ^
如有任何问题或者意见,欢迎留言交流。