Maven快照究竟是什么,为什么我们需要它?

我对Maven快照的含义以及为什么我们要构建一个有点困惑?


Maven中的快照版本是尚未发布的版本。

这个想法是, 1.0版本(或任何其他版本)完成之前,存在一个1.0-SNAPSHOT 。 该版本可能会变成1.0 。 它基本上是“ 1.0正在开发中”。 这可能接近真正的1.0版本,或者相当远(例如在0.9版本之后)。

“真实”版本和快照版本之间的区别在于快照可能会得到更新。 这意味着今天下载1.0-SNAPSHOT可能会给出与昨天或明天下载文件不同的文件。

通常,快照依赖性应该在开发期间存在,并且没有发布的版本(即,没有非快照)应该对快照版本有依赖性。


其他三个答案为您提供了一个关于什么是-SNAPSHOT版本的良好愿景。 我只是想在Maven找到SNAPSHOT依赖关系时添加一些有关Maven行为的信息。

当您构建应用程序时,Maven将搜索本地存储库中的依赖项。 如果没有找到稳定版本,它将搜索远程存储库(在settings.xmlpom.xml定义)来检索此依赖关系。 然后,它会将其复制到本地存储库中,以供下一个版本使用。

例如,一个foo-1.0.jar库被认为是一个稳定的版本,如果Maven在本地存储库中发现它,它将使用这个版本作为当前版本。

现在,如果你需要一个foo-1.0-SNAPSHOT.jar库,Maven会知道这个版本不稳定,并且可能会发生变化。 这就是为什么Maven会尝试在远程存储库中查找更新版本的原因,即使在本地存储库上找到该库的一个版本。 但是,这种检查每天只进行一次。 这意味着如果你的本地仓库中有一个foo-1.0-20110506.110000-1.jar (即这个库已经在2011/05/06 11:00:00生成),并且如果你再次运行Maven构建,同一天,Maven 不会检查存储库是否有更新的版本。

Maven为您提供了一种在存储库定义中更改此更新策略的方法:

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

其中XXX可以是:

  • 总是 :Maven会在每个构建中检查更新的版本;
  • 每日 ,默认值;
  • 间隔:XXX :以分钟为单位的时间间隔(XXX)
  • 永远不会 :Maven永远不会尝试检索另一个版本。 只有在本地不存在的情况下才会这样做。 通过配置, SNAPSHOT版本将作为稳定库进行处理。
  • (可以在这里找到settings.xml的模型)


    “SNAPSHOT”术语表示构建是给定时间代码的快照。

    通常意味着该版本仍处于重大发展阶段。

    当需要发布代码时,您需要更改pom中列出的版本。 因此,不要使用“SNAPSHOT”,而要使用“1.0”。

    有关版本控制的一些帮助,请查看语义版本控制规范。

    链接地址: http://www.djcxy.com/p/44077.html

    上一篇: What exactly is a Maven Snapshot and why do we need it?

    下一篇: NoSuchBeanDefinitionException in DelegatingFilterProxy