本篇内容主要讲解“maven 依赖树怎么查看以及冲突解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven 依赖树怎么查看以及冲突解决”吧!
如果你使用idea可以点击上图按钮,会有一个弹出框,选择一个项目工程,使用命令:
mvn dependency:tree
[INFO] +- org.springframework:spring-webmvc:jar:4.2.2.RELEASE:compile [INFO] | +- org.springframework:spring-beans:jar:4.2.2.RELEASE:compile [INFO] | +- org.springframework:spring-context:jar:4.2.2.RELEASE:compile [INFO] | | \- org.springframework:spring-aop:jar:4.2.2.RELEASE:compile [INFO] | | \- aopalliance:aopalliance:jar:1.0:compile [INFO] | +- org.springframework:spring-core:jar:4.2.2.RELEASE:compile [INFO] | | \- commons-logging:commons-logging:jar:1.2:compile [INFO] | +- org.springframework:spring-expression:jar:4.2.2.RELEASE:compile
会出现类似的依赖结构。上面就是一个依赖树结构,并有层级关系,我们可以看出他们的依赖父子关系。
** 其中+-
和\-
并无实际含义,只是方便展示查看。 **
verbose 的中文翻译为冗余的意思,这个命令就是查看更加具体和冗余的依赖树信息。 使用示例:
dependency:tree -Dverbose=true
这个参数就是查看你感兴趣的依赖,支持正则表示式。如我只想查看hadoop相关的依赖,示例:
dependency:tree -Dincludes=*hadoop*
输出:
com.mytest.server:mytest-server:jar:1.0-SNAPSHOT +- org.apache.hive:hive-jdbc:jar:3.1.2:compile | \- org.apache.hive:hive-shims:jar:3.1.2:compile | \- org.apache.hive.shims:hive-shims-0.23:jar:3.1.2:runtime | \- org.apache.hadoop:hadoop-yarn-server-resourcemanager:jar:3.1.0:runtime | +- org.apache.hadoop:hadoop-yarn-server-common:jar:3.1.0:compile | +- org.apache.hadoop:hadoop-yarn-server-applicationhistoryservice:jar:3.1.0:runtime | \- org.apache.hadoop:hadoop-yarn-server-web-proxy:jar:3.1.0:runtime +- org.apache.hadoop:hadoop-common:jar:3.1.2:compile | +- org.apache.hadoop:hadoop-annotations:jar:3.1.2:compile | \- org.apache.hadoop:hadoop-auth:jar:3.1.2:compile +- org.apache.hive:hive-exec:jar:3.1.2:compile | \- org.apache.hadoop:hadoop-yarn-registry:jar:3.1.0:compile | +- org.apache.hadoop:hadoop-yarn-api:jar:3.1.0:compile | \- org.apache.hadoop:hadoop-yarn-common:jar:3.1.0:compile +- org.apache.hbase:hbase-common:jar:1.1.2:compile | \- org.apache.hadoop:hadoop-mapreduce-client-core:jar:2.5.1:compile \- org.apache.hbase:hbase-server:jar:1.1.2:compile +- org.apache.hadoop:hadoop-client:jar:2.5.1:compile | +- org.apache.hadoop:hadoop-mapreduce-client-app:jar:2.5.1:compile | | +- org.apache.hadoop:hadoop-mapreduce-client-common:jar:2.5.1:compile | | | \- org.apache.hadoop:hadoop-yarn-client:jar:2.5.1:compile | | \- org.apache.hadoop:hadoop-mapreduce-client-shuffle:jar:2.5.1:compile | \- org.apache.hadoop:hadoop-mapreduce-client-jobclient:jar:2.5.1:compile \- org.apache.hadoop:hadoop-hdfs:jar:2.5.1:compile
默认的依赖树输出是到控制台的,你可以重定向到一个你指定的文件。如:
dependency:tree -Dincludes=*hadoop* -DoutputFile=你指定的文件
这样方便后续查看。
以解决guava
为例,查看命令可以使用-Dverbose
,你可以看到多个guava
版本,有很多还有提示冲突了(com.google.guava:guava:jar:16.0.1:runtime - omitted for conflict with 11.0.2)
。
你可以手动解决冲突,引入适配版本,然后依赖包中依赖了guava
包的使用 exclusion
进行排除,如:
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-common</artifactId> <version>1.1.2</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </dependency>
但是还有时候你会遇到更糟糕的情况,不同包依赖的包互相冲突,并且这个冲突包的两个版本不可兼容,如guava
。如我遇到的org.apache.hbase
和spring的依赖guava
冲突,但是他们依赖不同版本guava
,不可替换,此时好的办法就是使用shade版本,如:
<!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-shaded-client --> <dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-shaded-client</artifactId> <version>2.4.1</version> </dependency>
这个shade包可以去maven官网下载,通常官方打的依赖包还是可靠的。 shade原理: 为什么用shade版本就可以了?其实很简单,就是修改其中任意一方的依赖路径来解决的,其实就是package值。如Gson类的package正常值是package com.google.gson;
,在hbase-shaded-client
中就是package org.apache.hbase.thirdparty.com.google.gson;
,如果package不同,自然不会有冲突了。
到此,相信大家对“maven 依赖树怎么查看以及冲突解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。