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

Maven 依赖管理

作者头像
Dylan Liu
发布2020-01-02 11:45:58
6730
发布2020-01-02 11:45:58
举报
文章被收录于专栏:dylanliudylanliu

摘要

作为开发者,我们一直使用 Maven 来作为版本依赖管理工具,不过我们经常会遇到依赖冲突等问题,我们这边文章就来明确一下 Maven 是如何管理依赖与版本的。

Maven 版本结构

Maven的版本结构使用如下格式:

MajorVersion [ .MinorVersion [ .IncrementalVersion ] ] [ -Qualifier [ -BuildNumber ] ]

MajorVersion, MinorVersion, IncrementalVersion 和 BuildNumber 都需要是数字, Qualifier 是一个字符串。如果你的版本格式不符合这个要求,Maven 会将整个版本看成一个 Qualifier 字符串

版本号也隐含了兼容性

MajorVersion: 修改是非向后兼容的,使用新版本以为要做重大改动 MinorVersion: 修改是向后兼容的,一般表示引入了新功能 IncrementalVersion: 修改是向后兼容的,一般用于bug 修复

Maven依赖的选择策略

假设有一个项目P, 它有如下的依赖图:

那我们在构建的时候,哪些依赖会包含在构建中呢?

这就涉及到Maven的依赖选择策略,Maven 有两条依赖选择规则:

1. 距离根节点最近的依赖会被选择使用 2. 如果同一个依赖有多个版本处在同一层,首先声明的会被选择使用

因此按照上图,项目P的所选择的依赖为 [X, Y, Z 1.0].

但是如果我们想要使用 Z 2.0呢?我们有几种办法可以做:

1. 根据选择策略1, 我们可以直接在 pom 中声明 Z 2.0 依赖 2. 根据选择策略2, 我们可以调整 Y 在 pom 中声明的顺序到 X 之前 3. 我们可以使用 exclude 方式将 Z 1.0 排除出依赖

总结

Maven的依赖管理很灵活,但是当有很多的依赖时,很容易会造成依赖选择的不正确。其实更真实的说法是,Maven 使用的这种依赖选择策略是有问题的,当遇到依赖冲突时,抛出异常由程序员决定选择哪个依赖是更好的选择,Maven 的这种选择依赖的方式运气好一点的在启动或测试时发现,运气不好等到上线甚至埋藏很久才会运行异常,而越晚发现代价就越大。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • Maven 版本结构
  • Maven依赖的选择策略
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档