使用--update-snapshots时远程旧SNAPSHOT是否优先于本地新版本?
Maven
--update-snapshots 选项的依赖版本选择逻辑 让我帮你理清这两个日常Maven构建中很常见的疑问,都是实际开发里容易搞混的点:
疑问一:使用--update-snapshots时,远程旧SNAPSHOT会不会优先于本地更新版本?
答案是不会。Maven对SNAPSHOT版本的优先级判断核心依据是构建时间戳,而非依赖存储的位置(本地/远程)。
当你执行带--update-snapshots(或简写-U)的Maven命令时,它会按以下逻辑处理:
- 先去远程仓库检查该SNAPSHOT的最新时间戳版本
- 把远程版本的时间戳和本地.m2仓库里同SNAPSHOT版本的时间戳做对比
- 最终选择时间戳更新的那个版本,不会因为是远程仓库就优先选用
简单来说:如果本地的SNAPSHOT是你刚构建的,时间戳比远程旧版本新,哪怕加了-U,Maven还是会用本地的更新版本。
疑问二:本地.m2有自行构建安装的更新SNAPSHOT,Maven会如何选择?
这个要分两种场景来看:
- 未使用
--update-snapshots选项:Maven默认优先使用本地.m2仓库中已有的SNAPSHOT版本,不会主动去远程仓库检查更新。也就是说,只要你本地有自行构建安装的版本,直接就用它了。 - 使用
--update-snapshots选项:Maven会同时对比本地和远程仓库中该SNAPSHOT的时间戳,最终选择时间戳最新的版本。如果你的本地自行构建版本时间戳比远程的新,就用本地的;如果远程有更新的,才会下载并使用远程版本。
额外补充:自行构建安装到本地的SNAPSHOT会带有你本地构建时的时间戳,这个时间戳是Maven判断新旧的唯一标准,和你是手动构建还是从远程下载无关。
内容的提问来源于stack exchange,提问作者ludenus
相关产品推荐
相关产品推荐

