Maven从Nexus快照仓库下载旧快照而非最新版本问题
问题根因
Maven默认对SNAPSHOT快照版本启用本地缓存策略,默认缓存有效期为24小时,有效期内执行依赖拉取命令时会直接使用本地缓存的旧包,不会主动同步远程Nexus仓库的最新快照版本。
解决方案
- 方法1:命令行添加强制更新参数(推荐临时使用)
执行命令时追加-U(--update-snapshots的缩写)参数,强制Maven跳过本地缓存校验,直接拉取远程最新快照版本。
修改后的完整命令如下:
mvn dependency:copy -Dartifact=${GROUP_ID}:${ARTIFACT_ID}:${VERSION}:jar:${PACKAGING} \ -DdistributionManagement.releaseRepository.repoId=${NEXUS_RELEASE_REPO_ID} \ -DdistributionManagement.snapshotRepository.repoId=${NEXUS_SNAPSHOT_REPO_ID} \ -DdistributionManagement.repository.releaseURL=${NEXUS_RELEASE_URL} \ -DdistributionManagement.repository.snapshotURL=${NEXUS_SNAPSHOT_URL} -DoutputDirectory=. \ -U
- 方法2:修改Maven配置永久生效
编辑Maven根目录下conf/settings.xml或用户目录下.m2/settings.xml,找到对应SNAPSHOT仓库的配置节点,修改快照更新策略为每次执行命令都检查更新:
<repository> <id>${NEXUS_SNAPSHOT_REPO_ID}</id> <url>${NEXUS_SNAPSHOT_URL}</url> <snapshots> <enabled>true</enabled> <!-- 核心配置:每次都检查快照更新,可选值还有daily(默认,每天检查)、interval:X(每X分钟检查)、never(从不更新) --> <updatePolicy>always</updatePolicy> </snapshots> </repository>
- 方法3:手动清理本地缓存
如果上述方法无效,可以直接删除本地Maven仓库中对应SNAPSHOT包的存储目录,路径为${本地Maven仓库根目录}/${GROUP_ID目录层级}/${ARTIFACT_ID}/${VERSION}-SNAPSHOT,删除后重新执行拉取命令即可。
注意事项
需要提前确认Nexus侧的SNAPSHOT仓库已开启「允许重新部署」权限,否则新的快照包无法正常上传到Nexus,自然也拉取不到最新版本。
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

