协慌网

登录 贡献 社区

什么是 Maven Snapshot,为什么我们需要它?

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

答案

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

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

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

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

另外三个答案为您提供了-SNAPSHOT版本的良好愿景。我只想在发现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/0611: foo-1.0-20110506.110000-1.jar生成),并且如果您再次运行 Maven 构建,同一天,Maven 不会检查存储库是否有更新的版本。

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

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

XXX可以是:

  • 总是 :Maven 将检查每个版本的更新版本;
  • 每日 ,默认值;
  • interval:XXX :以分钟为单位的间隔(XXX)
  • 永远不会 :Maven 永远不会尝试检索另一个版本。只有当它不存在于本地时才会这样做。通过配置, SNAPSHOT版本将作为稳定库处理。

(可以在这里找到 settings.xml 的模型

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

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

当代码准备好并且是时候释放它时,您将需要更改 POM 中列出的版本。然后,您将使用像 “1.0” 这样的标签而不是 “SNAPSHOT”。

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