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

新手上路,请多包涵

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

原文由 meisam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 580
2 个回答

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

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

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

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

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 3.0 许可协议

其他三个答案让您清楚地了解什么是 -SNAPSHOT 版本。我只是想添加一些有关 Maven 发现 SNAPSHOT 依赖项时的行为的信息。

当您构建应用程序时,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 可以是:

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

(可以在 此处找到 settings.xml 的模型)

原文由 Romain Linsolas 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题