Maven解决包冲突
依赖树
$ 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也无效,会清除全部本地依赖,不知道咋回事。
maven编译优化
一般编译命令
mvn clean compile
如果遇到Too many files with unapproved license
这个错误,加一个参数就能解决,像下面这样:
mvn clean -Drat.skip=true compile
优化后的编译命令
MAVEN_OPTS="-XX:+TieredCompilation -XX:TieredStopAtLevel=1" \
mvn clean -T 1C -Drat.skip=true compile -offline
解释:
-XX:+TieredCompilation -XX:TieredStopAtLevel=1
: 加速JVM的启动速度。-T 1C
: 为CPU的每个核都分配一个线程。-offline
: 不要从远端repos下载, 以确保整个编译过程都在本地进行运算。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2018-04-19 CentOS7.2 安装Docker
2017-04-19 Dubbo 只注册,只订阅