Maven 依赖项 - 版本与更新

Posted

技术标签:

【中文标题】Maven 依赖项 - 版本与更新【英文标题】:Maven dependencies - version vs updates 【发布时间】:2016-05-23 02:45:11 【问题描述】:

mvnrepository 通常会列出每个依赖项的“版本”和“更新”。

    如果我要发布自己的包,如何指定“更新”版本 Maven 在解析传递依赖时使用了哪种依赖?因此,如果我的包依赖于包 A,它依赖于包 B,版本 = 1.0,更新 = 1.1。我会得到哪个版本的 B?

【问题讨论】:

因此您定义为依赖于包 A(版本?),它依赖于包 B(版本 1.0)。因此,如果您不在包中覆盖它,您将获得包 B 的 1.0 版...因此,您在 pom 文件中定义了依赖项,该依赖项已检查到您的版本控制中,这意味着在您更改 pom 文件之前这不会改变...我可能误解了这个问题吗?如果您想更新您需要更改包 A 的版本(不同版本)..? 你在说什么“更新”?以mvnrepository.com/artifact/com.github.valdr/… 为例,你在哪里看到“更新”? @MarcelStör:jackson-databind 是 2.4.0 版,更新 2.7.1-1 @khmarbaise:确实是 A 依赖于 B 上的 1.0 版本。但是在 Marcel 的示例中说 - Valdr Bean 依赖于 jackson-databind。如果我包含 Valdr Bean,我什么时候可以获得 jackson-databind 2.4.0,什么时候可以获得版本 2.7.1-1? @EugeneMi 您还需要反馈吗?如果不是,我建议您考虑接受答案,以便可以将此问题标记为已关闭,meta.stackexchange.com/questions/5234/…。 【参考方案1】:

你问的是 MVNRepository 的“编译依赖”表的“更新”列中的信息是什么意思。

它会告诉您是否有可用的特定依赖项的更新版本,如果有,最新版本是什么。如果有复选标记,则表示相关库已经使用了最新版本的依赖项 X。无论 最新 版本是什么,您将始终获得 declared 版本的依赖项是。

因此,如果您使用valdr-bean-validation 1.1.2(上面的示例),您还将获得jackson-databind 2.4.0 作为传递依赖项(上面的第一行)。 2.7.1-1 将是最新可用的jackson-databind 版本。

注:我终于明白你的问题了。如果您从一开始就给我们一个具体的例子,对您会有所帮助。

【讨论】:

我注意到在某些情况下“更新”版本实际上比“版本”版本旧。例如“版本:2.5.0-b42;更新:2.4.0”。令人困惑。 是的,here's 是“更新”列的版本比“版本”列更旧的示例。我猜“更新”列版本是原始库需要的版本。另一个问题是关于复选标记。上面的解释不清楚。如果“版本列”是最新版本并且原始库需要该版本,是否存在复选标记? @andy-dufresne 回复:“版本:2.5.0-b42;更新:2.4.0”:按照 Maven 标准(即比较版本号的方式)2.5.0-b42 不是一般可用的版本,但是是 alpha、beta 或 RC 类型之一。这就是为什么它认为 2.4.0 是最新的普遍可用版本。在这方面它可能不够聪明。我想这是主观的。复选标记只是意味着(再次根据 Maven 的版本算法)最新的普遍可用版本是在项目 POM 中声明的版本 -> 项目正在使用最新的。 如果我想使用传递依赖的更新版本,如何在 POM.xml 中配置 @SridharSarnobat 我不知道。如果全世界都使用 SemVer,理论上可能可以从版本号的差异中得出此信息。但是,有些项目声称/似乎使用 SemVer,但仍会通过次要版本发布重大更改。只有一个保证:没有保证:-/

以上是关于Maven 依赖项 - 版本与更新的主要内容,如果未能解决你的问题,请参考以下文章

Maven 检查存储库中更新的依赖项

Maven 检查存储库中更新的依赖项

依赖管理中的依赖与 Maven 版本插件中的依赖

maven会在啥时候更新所有jar

maven更新版本具体依赖

mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目