温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

maven 依赖树怎么查看以及冲突解决

发布时间:2021-07-12 10:38:36 来源:亿速云 阅读:1102 作者:chen 栏目:编程语言

本篇内容主要讲解“maven 依赖树怎么查看以及冲突解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“maven 依赖树怎么查看以及冲突解决”吧!

maven 依赖树查看以及冲突解决

1. 查看依赖树

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

会出现类似的依赖结构。上面就是一个依赖树结构,并有层级关系,我们可以看出他们的依赖父子关系。

** 其中+-\- 并无实际含义,只是方便展示查看。 **

2. 依赖树查看扩展命令

1. -Dverbose

verbose 的中文翻译为冗余的意思,这个命令就是查看更加具体和冗余的依赖树信息。 使用示例:

dependency:tree -Dverbose=true

2. -Dincludes

这个参数就是查看你感兴趣的依赖,支持正则表示式。如我只想查看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
3. -DoutputFile

默认的依赖树输出是到控制台的,你可以重定向到一个你指定的文件。如:

dependency:tree -Dincludes=*hadoop* -DoutputFile=你指定的文件

这样方便后续查看。

3. 冲突解决

以解决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>

4. shade解决冲突

但是还有时候你会遇到更糟糕的情况,不同包依赖的包互相冲突,并且这个冲突包的两个版本不可兼容,如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 依赖树怎么查看以及冲突解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI