Maven仓库更新策略
maven仓库的更新策略指的是更新
maven-metadata-[repository].xml
,即何时触发从远程仓库读取最西的’maven-metadata-[repository].xml’的策略。
一、Maven下载仓库配置
updatePolicy: 该标签用于指定更新尝试发生的频率。Maven会比较远程和本地pom的时间戳(时间戳在maven-metadata文件)。可选项有:1)always;2)daily(默认);3)interval:X(X为整数,单位为分钟);4)never。
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" |
二、Maven更新逻辑
参考maven3.6.3源码:org.apache.maven.artifact.repository.metadata.DefaultRepositoryMetadataManager#resolve方法
如果
-U
强制更新,update=true如果
maven-metadata-local.xml
存在,且该文件的lastModified不符合更新策略,update=false如果
maven-metadata-snapshot.xml
不存在,update=true如果
maven-metadata-snapshot.xml
存在,则检查resolver-status.properties
中的时间戳是否符合更新策略
1)如果符合,update=true
2)否则,update=false1
2
3#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 11 16:46:54 CST 2020
maven-metadata-snapshots.xml.lastUpdated=1597135614187
三、Maven更新策略源码
参考maven3.6.3源码:org.apache.maven.artifact.repository.ArtifactRepositoryPolicy#checkOutOfDate
1 | public boolean checkOutOfDate(Date lastModified) { |
四、Maven build时使用哪个Jar
读取
groupId/artifactId/version/maven-metadata-local.xml
中versioning -> snapshotVersions -> snapshotVersion -> updated
(只看jar包的,忽略pom)读取
groupId/artifactId/version/maven-metadata-snapshot.xml
中versioning -> lastUpdated
选择最近的时间戳的依赖版本;若是远程版本,且版本不存在时会触发远程jar下载逻辑。
NOTE:
如果远程比本地的新,则远程下载的包会复制一份覆盖本地的artifactId-version.jar
和pom文件;