依赖树

$ mvn dependency:tree
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'properties' (position: START_TAG seen ...</profile>\n\t <properties>..
@85:18) @ C:\Users\qhong\.m2\settings.xml, line 85, column 18
[WARNING]
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.xuxueli:xxl-excel >------------------------
[INFO] Building xxl-excel 1.1.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxl-excel ---
[INFO] com.xuxueli:xxl-excel:jar:1.1.2-SNAPSHOT
[INFO] +- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] +- org.apache.poi:poi:jar:3.17:compile
[INFO] | +- commons-codec:commons-codec:jar:1.10:compile
[INFO] | \- org.apache.commons:commons-collections4:jar:4.1:compile
[INFO] \- org.apache.poi:poi-ooxml:jar:3.17:compile
[INFO] +- org.apache.poi:poi-ooxml-schemas:jar:3.17:compile
[INFO] | \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
[INFO] | \- stax:stax-api:jar:1.0.1:compile
[INFO] \- com.github.virtuald:curvesapi:jar:1.04:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.572 s
[INFO] Finished at: 2019-04-19T11:24:17+08:00
[INFO] ------------------------------------------------------------------------

mvn:dependency:tree 打印出来的是 maven解决了冲突后的树(解决冲突的策略是:就近原则,即离根近的依赖被采纳)

原始依赖树

$ mvn dependency:tree -Dverbose
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'properties' (position: START_TAG seen ...</profile>\n\t <properties>... @85:18) @ C:\Users\qhong\.m2\settings.xml, line 85, column 18
[WARNING]
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.xuxueli:xxl-excel >------------------------
[INFO] Building xxl-excel 1.1.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxl-excel ---
[INFO] com.xuxueli:xxl-excel:jar:1.1.2-SNAPSHOT
[INFO] +- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] +- org.apache.poi:poi:jar:3.17:compile
[INFO] | +- commons-codec:commons-codec:jar:1.10:compile
[INFO] | \- org.apache.commons:commons-collections4:jar:4.1:compile
[INFO] \- org.apache.poi:poi-ooxml:jar:3.17:compile
[INFO] +- (org.apache.poi:poi:jar:3.17:compile - omitted for duplicate)
[INFO] +- org.apache.poi:poi-ooxml-schemas:jar:3.17:compile
[INFO] | \- org.apache.xmlbeans:xmlbeans:jar:2.6.0:compile
[INFO] | \- stax:stax-api:jar:1.0.1:compile
[INFO] \- com.github.virtuald:curvesapi:jar:1.04:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.636 s
[INFO] Finished at: 2019-04-19T11:13:29+08:00
[INFO] ------------------------------------------------------------------------

通过指定 -Dverbose参数则可以显示原始的依赖树,让你显式地看出某个包都在哪些枝干上出现了。

递归依赖的关系列的算是比较清楚了,每行都是一个jar包,根据缩进可以看到依赖的关系。

  • 最后写着compile的就是编译成功的。
  • 最后写着omitted for duplicate的就是有jar包被重复依赖了,但是jar包的版本是一样的。
  • 最后写着omitted for conflict with xxxx的,说明和别的jar包版本冲突了,而该行的jar包不会被引入。比如上面有一行最后写着omitted for conflict with 1.8.3,那么该行的commons-beanutils:jar:1.8.0不会被引入,只有1.8.3版本的会被引入。

筛选依赖树

只想看依赖树中包含 groupId 为 javax.serlet 的枝干
mvn dependency:tree -Dincludes=javax.servlet 不想看依赖树中包含 groupId 为 javax.serlet 的枝干
mvn dependency:tree -Dexcludes=javax.servlet

参数的格式(pattern)定义如下:

[groupId]:[artifactId]:[type]:[version]

每个部分(冒号分割的部分)是支持*通配符的,如果要指定多个格式则可以用,分割,如:

mvn dependency:tree -Dincludes=javax.servlet,org.apache.*

demo:

$ mvn dependency:tree -Dverbose -Dincludes=org.apache.poi
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'properties' (position: START_TAG seen ...</profile>\n\t <properties>... @85:18) @ C:\Users\qhong\.m2\settings.xml, line 85, column 18
[WARNING]
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.xuxueli:xxl-excel >------------------------
[INFO] Building xxl-excel 1.1.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxl-excel ---
[INFO] com.xuxueli:xxl-excel:jar:1.1.2-SNAPSHOT
[INFO] +- org.apache.poi:poi:jar:3.17:compile
[INFO] \- org.apache.poi:poi-ooxml:jar:3.17:compile
[INFO] +- (org.apache.poi:poi:jar:3.17:compile - omitted for duplicate)
[INFO] \- org.apache.poi:poi-ooxml-schemas:jar:3.17:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.635 s
[INFO] Finished at: 2019-04-19T11:17:21+08:00
[INFO] ------------------------------------------------------------------------

也可以直接查询一个artifactid

mvn dependency:tree -Dverbose -Dincludes=:notify-common

清空本地仓库依赖包

mvn dependency:purge-local-repository

默认情况下,插件对所有传递依赖项进行操作。这意味着插件可以在开始清除过程之前下载某些缺少的依赖项以收集完整的依赖关系树信息。

actTransitively

为避免此预下载步骤,可以将插件配置为仅使用“actTranstively”参数对项目的直接依赖性进行操作。

mvn dependency:purge-local-repository -DactTransitively=false

actTransitively是否应该对所有传递依赖性起作用。默认值为true。

设置为false就仅对项目的直接依赖项进行删除,不进行设置就全部删除,包括依赖包的依赖包。。。

reResolve

mvn dependency:purge-local-repository -DreResolve=false

reResolve是否重新解析依赖关系(就是删除以后是否重新下载依赖包

--fail-at-end

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

忽略错误( --fail-at-end )。 对于那些有一些依赖关系混乱的项目,或者依赖于一些内部的仓库(这种情况发生),这样做有时是有用的。

过滤删除依赖包

mvn dependency:purge-local-repository -Dinclude=org.slf4j:slf4j-api,org.slf4j:log4j-over-slf4j

手动清除

手动清除不属于当前项目依赖关系树的特定依赖项

mvn dependency:purge-local-repository -DmanualIncludes=org.apache:apache

经过测试发现,清理本地代码的include,exclude全无效,不会清除本地任何依赖,includes,exculdes也无效,会清除全部本地依赖,不知道咋回事。

参考:

用dependency插件解决依赖包冲突

清除本地存储库依赖项

用dependency:tree查看maven引入jar包的传递依赖

Apache Maven Dependency Plugin

Maven解决包冲突的更多相关文章

  1. 【原】Maven解决jar冲突调试步骤:第三方组件引用不符合要求的javassit导致的相关异常

    [环境参数]开发框架:Spring + MyBatis + SpringMVC + KettleJDK版本:1.8.0_91javassist依赖版本:javassit-3.12.1.GA [障碍再现 ...

  2. maven依赖包冲突解决思路

    1.显示依赖关系mvn dependency:tree > tree.txt显示所有依赖关系,并输出到text.txtmvn dependency:tree -Dverbose > tre ...

  3. Java-idea-常用技巧-转maven,解决包依赖冲突

    1.Intellij IDEA如何将普通工程转换成maven工程 项目上右键 Add Framework Support,选择maven 2.Intellij IDEA 自动生成 serialVers ...

  4. Maven类包冲突终极三大解决技巧 mvn dependency:tree

    Maven对于新手来说是<步步惊心>,因为它包罗万象,博大精深,因为当你初来乍到时,你就像一个进入森林的陌生访客一样迷茫. Maven对于老手来说是<真爱配方>,因为它无所不能 ...

  5. 用好这几个技巧,解决Maven Jar包冲突易如反掌

    前言 大家在项目中肯定有碰到过Maven的Jar包冲突问题,经常出现的场景为: 本地运行报NoSuchMethodError,ClassNotFoundException.明明在依赖里有这个Jar包啊 ...

  6. [转]Maven类包冲突终极三大解决技巧

    举例 A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这 ...

  7. Maven类包冲突终极解决方案

    本文转自:http://ian.wang/106.htm 举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过 ...

  8. maven 解决jar冲突

    那句话怎么讲来着的... 引用 如果你爱他,就请让他用Maven,因为那里是天堂,如果你恨他,就请让他用Maven,因为那里是地狱. Maven对于新手来说是<步步惊心>,因为它包罗万象, ...

  9. maven的包冲突

    maven的间接引用会引入其他未声明的包,maven自身的冲突解决方案,最终引用的包可能不是希望的版本. 直接声明期望的版本号,就没有间接引用的问题. 子模块很多时,可以使用dependencyMan ...

随机推荐

  1. VUE-011-通过 v-if 和 v-for 实现特定值的列表循环匹配,并显示满足匹配条件的值

    前端页面开发过程中,经常遇到服务端返回的数据中,存在一些需要转义的表单项.比如,员工信息中的学历,假设研究生学历的代码是101(或10001),则数据库中对应字段存放的是 101(或10001),而非 ...

  2. 把jmeter获取到的信息存到本地文件

    1.jmeter使用正则表达式提取器,获取到响应信息,把获取到的响应信息写到本地文件 2.添加后置Bean Shell ,写入以下脚本 3.打开本地文件查看,写入成功 脚本内容如下: FileWrit ...

  3. python一次性解压多层嵌套zip压缩包

    zip包里的结构不是固定的,有可能只需要解压一次就完成了,有可能解压后里面还存在zip文件,需要继续进行解压缩 写了个简单的递归函数来实现解压非固定结构zip包,若解压后的zip子目录下仍含有zip文 ...

  4. selenium的

    1.简介 selenium可以认为是反反爬虫的最佳利器,它基本可以等同于真实的浏览器访问,用它可以加载到动态数据,也省去了cookie的操作,但是用这个有一个重大的效率问题.所以selenium可以用 ...

  5. GBDT总结

    一.简介 gbdt全称梯度下降树,在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一,在前几年深度学习还没有大行其道之前,gbdt在各种竞赛是大放异彩.原因大概有几个,一是效果确实挺不错.二是 ...

  6. python项目推荐(转载知乎)

    作者:Wayne Shi链接:https://www.zhihu.com/question/29372574/answer/88744491来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  7. vue中动态样式不起作用? scoped了解一下

    vue中style标签使用属性scoped的注意事项 style上添加属性scoped可以实现样式私有化,但是在使用动态样式时,样式会不起作用.可以先去掉scoped

  8. MUI 返回顶部

    //绑定滚动到顶部按钮事件 if ($("#scroll-up").length > 0) { var scrollToTopBox = $("#scroll-up ...

  9. mysql 和 hive 和分布式zookeeper和HBASE分布式安装教程

    一,mysql 安装mysql5.7完整教程1. yum -y install mysql-server直接执行语句后等待就好已安装: mysql-community-server.x86_64 0: ...

  10. if语句&switch&Scanner

    if流程控制语句: if 语句的用语法如下: if(boolean表达式){ //如果条件为true那么执行 } 只有条件为true时才会执行,否则执行if语句后面的代码. 实例代码: public ...