maven解决冲突以及常用命令

网友投稿 636 2022-11-13

maven解决冲突以及常用命令

maven解决冲突以及常用命令

依赖冲突产生的原因:

传递依赖

maven坐标有一项scope此元素指的是任务的类路径(编译和运行时,测试等)以及如何限制依赖关系的传递性。

有 6 种可用的限定范围:

compile 编译依赖范围 如果没有指定 scope 标签,maven 默认为这个范围。

test 测试依赖范围 正常使用应用程序不需要依赖关系 Junit

provided 已提供依赖范围 它只适用于编译和测试 servlet-api

runtime 运行时依赖范围 此范围表示编译不需要依赖关系,而是用于执行 jdbc驱动

system和 provided 依赖范围一致,需要通过 显示指定,且可以引用环境变量

import 导入依赖范围。使用该选项,通常需要 pom,将目标 pom 的 dependencyManagement 配置导入合并到当前 pom 的  dependencyManagement 元素。

依赖传递性以及依赖范围

何为传递性依赖

依赖范围与传递性依赖的关系

依赖冲突解决方案

1、maven本身处理机制-依赖调解

短路径优先:假如有以下依赖:A -> B -> C ->X(版本 1.0) 和 A -> D -> X(版本 2.0),则优先解析较短路径的 X(版本 2.0);

2、可选依赖

optional可选依赖

A->B、B->X(可选),B->Y(可选) X,Y依赖不会传递到A中

可选依赖用于两个特性相互互斥,例如 mysql,PostgreSQL不能同时实现特性

3、排除依赖

4、归类依赖-版本锁定

优化依赖

1、查看已解析的依赖

mvn dependency:list

一层为顶层依赖,顶层依赖的依赖为二级依赖,以此类推

2、查看依赖树

mvn dependency:tree

通过上方的命令解析之后会构成依赖树,利用依赖树可以清楚看到依赖引入的传递路径

3、分析项目当前依赖

mvn dependency:analyze

Used undeclared dependencies found

Unused declared dependencies found

注意:这里说的实际代码没有用到,指的是在main/java和test里没有用的,但是并不是意味着真的没有用到这些包,有可能配置文件中引用或者其他扩展点自动加载这些包,所以我们在删除依赖的时候一定要小心,做好备份,因为这类引用maven是分析不出来的。

常用命令

修改版本号命令

安装插件

mvn vsersion:set -DnewVersion=1.1-SANPSHOT

激活环境

mvn clean package -P dev

跳过单元测试

-Dmaven.test.skip=true

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:四种常见的post请求中的参数形式
下一篇:log4j2异步打印性能提升方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~