背景
这个问题是我现在才注意到的,因为之前使用maven都是在本地打包下载。用到的依赖包也都是发布的稳定版本,现在用到deploy了才有这个疑惑。我将一个包打包到远程仓库,其他项目总是能正确下载最新的,Maven是怎么判断本地仓库和远程仓库哪个是最新的呢?
猜想
是用提交时间判断么?还是根据版本号判断的?
类型
maven对构件的更新判断基本上是两种,一种是稳定版本,一种是maven特有的SNAPSHOT版本。
解释
1、稳定版本很好判断,直接根据maven构件的坐标体系就能够获得。先从本地仓库中找,如果本地仓库没有,就从pom.xml和setting.xml配置的远程仓库来找。
2、SNAPSHOT版本的判断比较麻烦,基本步骤如下:
- 假设我在我自己的电脑上使用 “mvn install” 构建了“com.mycompany.demo:test:1.0-SNAPSHOT”,那么Maven会在本地仓库对应的位置生成maven-metadata-local.xml文件。
- 某一天,我需要构建一个依赖于test的项目,于是我运行了mvn package来打包。
- 从公司的Maven服务器上下载maven-metadata.xml,重命名为“maven-metadata-<RepositoryID>.xml”,并保存到本地仓库相应目录。
- 比较maven-metadata-local.xml与maven-metadata-<RepositoryID>.xml中的lastUpdated时间戳的值,比较哪一个时间戳比较大。