Maven依赖冲突解决

2024-01-10 15:17:52

?Maven介绍

????????Maven 是 Apache 软件基金会唯一维护的一款自动化构建工具,专注于服务Java平台的项目构建和依赖管理。

1.Maven是如何寻找依赖的?

????????首先会去本地仓库寻找,然后会去公司的私服仓库寻找,一般私服仓库存的都是公司自己开发的 jar 包,最后会去 由Apache 团队来维护中央仓库寻找,一旦在一个地方找到就不再寻找。?

2.在我们项目中具有众多依赖,程序是如何确定这个依赖的位置呢?

????????通常情况下,我们利用?groupIdartifactIdversion?标签来确认这个依赖的唯一坐标?

<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:当前版本

<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>

3.scope 标签在我们的项目中经常使用到,你知道常见的范围有哪些吗??

  • compile:默认范围,编译、测试、运行都有效
  • provided:编译和测试有效,最后运行不会被加入,如tomcat依赖
  • runtime:在测试和运行的时候有效,编译不会被加入,比如jdbc驱动jar
  • test:测试阶段有效,比如junit
  • system:与provided一致,编译和测试阶段有效,但与系统关联,可移植性差
  • import:导入的范围,它只是用在dependencyManagement中,表示从其它的pom中导入dependency的配置

4.Maven的生命周期

?

clean 移除所有上一次构建生成的文件
validate:验证工程是否正确,所有需要的资源是否可用
compile:编译项目的源代码
test:使用合适的单元测试框架来测试已编译的源代码。这些测试不需要已打包和布署。
package:把已编译的代码打包成可发布的格式,比如 jar、war 等。
verify:运行所有检查,验证包是否有效且达到质量标准。
install:把包安装到maven本地仓库,可以被其他工程作为依赖来使用
site 生成项目的站点文档
deploy:在集成或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享

?4.解决Maven依赖冲突

?

????????这个红色波浪线是因为依赖冲突,你看你的 fastjson 这个包,是不是显示 omitted for conflict with 1.2.47,这个意思就是你的 fastjson 包产生了冲突。我换个说法给你解释,就比如说你的项目中用了 A jar 包依赖 C jar 包, B jar 包也依赖 C jar包,Maven 就帮你下载了两个版本的 C jar 包,然后他们就产生了依赖冲突,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的 jar 包,而另一个无用的jar包则未被使用,这就是所谓的依赖冲突。”

????????在大多数情况下,jar 包冲突是不会影响我们系统正常的运行的,但是不排除在一些极端的情景下会出现找不到类的异常?,我们作为一名严谨的程序员(为了 KPI 考虑),一定要把这个问题解决掉

? ? ? ? ?(1).通过?exclusions?标签实现。冲突项目依赖?juejin-image-web项目的时候,主动排除传递的juejin-convert-web项目依赖

 <dependency>
        <groupId>com.juejin.business</groupId>
        <artifactId>juejin-image-web</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.juejin.business</groupId>
                <artifactId>juejin-convert-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

(2).?通过optional实现

<dependency>
        <groupId>com.juejin.business</groupId>
        <artifactId>juejin-convert-web</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <optional>true</optional>
 </dependency>

?

?

文章来源:https://blog.csdn.net/m0_60388241/article/details/135500203
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。