Maven快照更新

14

我有一个包含快照依赖的Maven项目。 Maven如何知道是否需要更新该快照?它总是会更新吗?是否基于时间或基于校验和进行更新?我知道我可以强制更新,但除此之外,它如何检查?

谢谢, Jeff

2个回答

20
根据文档,它默认只会每天更新一次,也就是在执行每天的第一个构建时。你可以使用“snapshot-policy”元素重写此行为。
下面是可用的选项:
- always - 每次启动Maven时都会检查更新快照的新版本。 - never - 不会检查远程新版本。可以手动进行一次性更新。 - daily(默认)- 在当地时间的第一次运行时检查更新。 - interval:XXX - 每隔XXX分钟检查一次更新。
参考链接:http://maven.apache.org/maven-settings/settings.html

6
这个链接有点过时了 - 我建议尝试访问http://maven.apache.org/settings.html#Repositories,并搜索updatePolicy。 - Roy Truelove
@RoyTruelove 确实如此,但这并没有真正帮助。这是该页面上最相关的一行:“此元素指定更新应尝试发生的频率。Maven将比较本地POM的时间戳(存储在存储库的maven-metadata文件中)与远程时间戳。”至于它确切的含义,我不知道。它是在一天的第一次运行时执行吗?还是距离上次下载已经过去了24小时? - Noremac
如果使用m2e插件,右键单击项目-> maven->更新项目->选择强制更新快照/发布版本即可解决问题。 - Junchen Liu
或者 mvn clean install -U 。-U 表示强制更新快照和发布。 - Junchen Liu

8
我有一个包含快照依赖的Maven项目。 Maven如何知道是否需要更新快照?
Maven将比较本地POM的时间戳(存储在存储库的maven-metadata文件中)与远程时间戳进行比较。例如,可以查看JBoss快照存储库中的hibernate-core-3.5.0-SNAPSHOT
它是否总是更新?是基于时间还是基于校验和的更新?
这取决于包含快照的repositorypluginRepositoryupdatePolicy。默认情况下,每天检查一次(其他可能的值为alwaysinterval:X(其中X是以分钟为单位的整数)或never)。
当你在一个正在积极开发的项目中内部使用SNAPSHOT时,通常会为内部存储库设置<updatePolicy>always</updatePolicy>。

但是,如果您正在处理依赖于a-snapshot的项目b,并且您还在处理a,则下载a的快照将覆盖您自己的更改。 - Asaf Mesika
@AsafMesika 这是真的,Eclipse的m2插件有一个“工作区分辨率”功能,它仅为在Eclipse工作区中未打开的项目下载新的SNAPSHOT。很遗憾,我还没有找到类似的NetBeans解决方案。 - bbaja42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接