持续交付 36 讲
王潇俊
携程系统研发部总监
39681 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
开篇词 (1讲)
结束语 (1讲)
持续交付 36 讲
15
15
1.0x
00:00/00:00
登录|注册

05 | 手把手教你依赖管理

禁止变更代码不改版本号上传到中央仓库
使用 properties 定义版本
使用 BOM 进行版本定义
使用 dependencyManagement 定义依赖
POM分层继承关系
生产环境不使用 SNAPSHOT 或带范围的依赖版本
依赖仲裁原则
依赖传递
依赖范围
依赖配置描述
POM(Project Object Model)
思考题
后续
总结
Maven 最佳实践
Maven 如何管理依赖
依赖管理的常规思路
依赖管理的复杂度
软件工程是多人合作的结果
如何管理你的依赖?

该思维导图由 AI 生成,仅供参考

软件工程是多人合作的结果,我们在开发软件的时候经常会使用一些别人编写好的,比较成熟的库。
比如,早期的前端开发用到了 jQuery 库,那么通常的做法是去官网下载一个最新版本的 jQuery,然后放在自己本地的项目中。对于简单的前端项目来说,这样可以简单粗暴地达到目的。
但当项目越来越庞大,除了 jQuery 之外,你还会依赖一些其他的第三方库。比如 Bootstrap 与 Chosen,这两个流行的前端库也都依赖 jQuery,如果这些第三方库依赖的 jQuery 版本一致还好,但大多数情况并没有这么乐观:
你的项目依赖的 jQuery 版本是 1.0.0 ,Bootstrap 依赖的版本是 1.1.0,而 Chosen 依赖的版本是 1.2.0,看上去都是小版本不一致,一开始并没有发现任何问题,但是如果到后期发现不兼容,可能就为时已晚了。
所以,你需要在确定依赖之前,就把整个系统的依赖全部梳理一遍,保证每个依赖都不会有冲突问题。
你可能会质疑,这个前端工程师一定是初级的,事先都不会确认 Bootstrap 和 Chosen 依赖的版本吗,直接选择依赖 jQuery 1.0.0 版本的不就行了?
这么说有一定道理,但是手工维护这些依赖是相当麻烦且容易出错的。随便找一个比较流行的开源软件,你都会发现它依赖了大量的第三方库,而这些第三方库又依赖着其他的第三方库,形成了一条十分复杂的依赖链。靠人工去解决这个依赖链一定会让你怀疑人生,因此你需要一些工具去管理项目的依赖。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文总结了软件依赖管理的重要性以及各种依赖管理工具的应用。首先讨论了依赖管理的挑战,指出了依赖冲突可能导致的严重问题。随后介绍了各种平台的依赖管理工具,包括操作系统的yum、apt等,以及编程语言的Maven、npm等。以Maven为例,详细解释了其如何管理Java项目的依赖,包括POM文件的结构和依赖配置的含义。此外,还介绍了Maven的依赖仲裁原则,即最短路径优先原则和第一声明优先原则。接着分享了一些Maven的最佳实践,包括在父模块多使用dependencyManagement来定义依赖、使用BOM进行版本定义等。最后,提出了思考题,鼓励读者对比Maven与其他语言的依赖管理工具,如npm、pip、gem等,探讨它们各自的优缺点。整体而言,本文通过实际案例和技术原理,全面阐述了依赖管理的重要性和各种依赖管理工具的应用,对于软件开发人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《持续交付 36 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • 阳阳
    置顶
    其实我们关注的是持续集成在携程的解决方案和技术栈,组合思路等。我想愿意关注持续集成的技术,都对Maven不陌生。

    作者回复: 要考虑不同层次的读者:)

    2018-07-16
    3
    13
  • 大M
    我是个前端,对后台这套会有一些模糊的概念,不过还是能听得懂,在前端的包管理中,我现在用的是yarn,前期也出现过不同环境的一些表现不同,最后确定是版本问题,当时的npm 并没有版本锁定功能,我后面转到了用yarn,使用yarn 会在本地根目录自动新建yarn.lock 文件来锁定依赖版本,我们在自动构建集成服务器上不能使用开发机器的node_modules ,因为操作系统有别,需要单独安装依赖,通常我会把package.json 和yarn.lock 传到构建服务器,通过yarn 来安装这个nodemodles 。

    作者回复: 棒,前端的包管理一直都被诟病的,不过好在大家都是聪明的程序员:)

    2018-07-17
    3
  • 蒜儿
    老师好,有个问题一直比较困惑,一般在开发分支上pom文件里面模块的版本号是snapshot的,合并到master分支准备发布或者测试的时候需要把模块的版本号和相关依赖的版本号的snapshot去掉改为正式版本,目前我们都是手工去改,这个怎么能自动化修改,还是有其他方式进行控制,谢谢

    作者回复: 携程自己做了一个jar包的发布工具,每次发布时可修改version,也会对version做一些检查,比如唯一检查等,发布前根据version会产生一个修改pom的push。用这个工具可以随意发布项目中的任何jar,但本质上version还是手工控制的。开发明确版本号还是很有必要的,只是把操作变简单一点

    2018-09-11
    1
  • 酒粒
    老师,请教下,gradle 打包war包没有把依赖的jar包所依赖的包一并打包到war里面,总是缺少了些jar,能指点下大概是哪里出问题了吗

    作者回复: 这个不太好说,多数还是配置问题

    2020-04-02
  • bean
    超级父POM中一般包含哪些jar包?有些项目之间的共同点不多,或者它们的技术选型不同,不想下载父POM中用不到的包怎么办?

    作者回复: 父pom里都是dependency management,子pom不引用就不会下载这些父pom中的jar

    2018-08-01
  • 林007
    pom继承树给个例子

    作者回复: 文章中最佳实践篇章有例子的:)

    2018-07-30
  • 付盼星
    老师好,看到依赖管理的继承,我想到了配置管理的继承,我们公司目前用的是spring cloud的配置服务,研发一般在项目的bootstrap.yml里面指定配置中心的地址和要激活的配置,但是发现大家的配置文件里面的内容有很多重复配置条目,这种情况能否也做到继承父配置文件?

    作者回复: 配置中心地址是一个比较特殊的配置,也可以说是所有其他配置获取的基础,我们采用的是基于环境和约定获取这个配置值,具有的方法在环境一讲中会讲到

    2018-07-15
  • 铭熙
    编译用到的命令是统一的么?如何管理的。

    作者回复: 基本统一,适度自由,通过编译平台管理,下一章就讲编译了,会有讲到

    2018-07-14
  • 小裙子
    不够详细,结合mvn实例比较好
    2018-09-27
    5
  • 天涯
    既然讲到maven,希望能分享些实际应用经验和方案,在公司大规模场景中的pom架构,流程,和版本如何有效管理
    2018-07-16
    5
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部