maven依赖问题(原则,冲突查询,处理)

1.maven的依赖原则

 1.路径优先,(引用层级越少越好)

这里写图片描述 

 2.声明优先 ,(相同路径长度下,先声明的先生效)

3.覆写优先,(引用方和被引用方声明相同的jar,版本以引用方的版本为依据)

2.maven的依赖范围

         <dependency>
            <groupId>X</groupId>
            <artifactId>X</artifactId>
            <version>X</version>
            <scope>compile</scope>
         </dependency>
         <dependency>
            <groupId>X</groupId>
            <artifactId>X</artifactId>
            <version>X</version>
            <scope>test</scope>
         </dependency>

2.1 complie 编译范围的依赖、

2.2 test   测试范围的依赖 ( 只对test有效,不参与打包参与部署)

2.3 provided  开发范围的依赖(典型例子servlet-api 在开发过程中必须提供(添加tomcat运行时环境/添加maven依赖),打包过程中忽略,运行时有servlet容器提供)

3.依赖传递

A依赖B ,B依赖C , 最后A也会有C的jia包;

4.依赖冲突

 4.1 idea plugins 安装 Maven Helper 插件,在项目的pom文件左下角中会 Dependency Analyzer 按钮,点击能进入maven的依赖树界面,查看jar的依赖结构。点击到具体的jar,可以看到整个项目中直接引用和间接引用该jia的初始包,冲突版本等信息;

 

 4.2  mvn dependency:tree  指令调出maven依赖树,查看依赖包 (我在程序一直在下载依赖包,测试成功),

 执行结果:

 4.3 idea自带的maven树支持,树的结构太复杂,不太能看明白。

5.依赖排除

5.1 pom配置直接排除  <exclusions>标签

<dependency>
  <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.2.6.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

5.2 不同模块引用的版本不同,通过测试调到一致版本,(建议统一用高版本)

5.3 通过maven的依赖原则来调整坐标在pom文件的申明顺序是最好的办法。

        相同pom中调整声明的先后顺序

        不同模块在同一个父类模块中时,调整父类Pom中 <modules>标签的声明顺序

5.4使用 dependencyManagement

如果有父 pom.xml 存在的话可以使用 dependencyManagement 来解决这个问题。

父 pom.xml 的关键部分如下

<properties>
    <org.springframework.version>4.3.18.RELEASE<org.springframework.version>
</properties>
  
<dependencyManagement>  
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}<version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
    <dependencies>
</dependencyManagement>

而子 pom.xml 中的关键部分如下

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
<dependencies>

子 pom.xml 依赖中版本号会直接继承父 pom.xml 中 dependencyManagement 中依赖的版本号。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值