前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven依赖和冲突

Maven依赖和冲突

作者头像
OPice
发布2019-11-02 22:07:11
7310
发布2019-11-02 22:07:11
举报
文章被收录于专栏:D·技术专栏

maven的核心就是依赖管理,在模块过多,之间的依赖关系也很复杂,maven提高了一个高效的管理方法。

代码语言:javascript
复制
        <dependency>
            <groupId>工程组唯一标识</groupId>  
            <artifactId>工程唯一标识</artifactId>
            <version>版本</version>
            <scope>依赖范围</scope>
            <optional>依赖可选</optional>
            <exclusions>
                <exclusion>
                    <!-- 排除jar -->
                    <groupId>com.alibaba</groupId>
                    <artifactId>jconsole</artifactId>
                    <!--注意这里没有写版本-->
                </exclusion>
            </exclusions>
        </dependency>

当A 依赖 B ,B 依赖C。 其中C是通过依赖传递给A,A中是有C的。 其中A不想依赖C 可以使用<exclusion>(不指定版本)或者<optional>(默认值false)

  • scope取值: compile、provided、test、runtime、system、import

取值

范围

描述

compile

默认值,编译时、测试、运行

当前项目的类路径下有效

provided

编译、测试

由运行时JDK或者容器(Idea)提供

test

测试,运行

只在测试编译执行阶段

runtime

运行时

在编译时不是必须的,执行时必须。类似JDBC

system

编译测试

从本地系统指定路径获取systemPath

import

导入阶段

只用在dependencyManagement中,和<type>pom</type>配合使用

  • 依赖冲突

依赖冲突产生的原因:就像A引入了B和C,但是在B和C中都依赖了D,B依赖的D的1.0版本,C依赖了D的1.1版本。这是两个版本的D就有可能出现冲突,为什么是有可能? 因为依赖管理是根据两个版本的深度和谁先声明,来决定选谁。 比如: A->B->D(1.0) A->C->E->D(1.1) 这时A就会选择D(1.0); 如果路径相同谁先声明使用谁。

依赖冲突大多场景:NoSuchMethod、NotFoundClass,方法类不一致。 解决方式:mvn denpendency:treee -->tree.tex 在当前目录打印出maven 依赖树生成tree.txt 文件,找出冲突的jar。

如何避免依赖冲突:项目中依赖的jar都有父POM < dependencyManagement>管理,其他模块使用import。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档