首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven Snapshot到底是什么,我们为什么需要它?

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

Stack Overflow用户
提问于 2011-05-06 00:50:50
回答 14查看 395.9K关注 0票数 967

我对Maven Snapshot的含义以及我们为什么要构建它感到有点困惑。

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2011-05-06 00:57:40

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

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

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

通常,快照依赖关系应该在开发过程中只存在,并且没有发布版本(即没有非快照)应该依赖于快照版本。

票数 1.2K
EN

Stack Overflow用户

发布于 2011-05-06 14:41:10

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

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

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

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

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

代码语言:javascript
运行
复制
<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

其中XXX可以是:

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

(可以在here)上找到settings.xml的型号

票数 865
EN

Stack Overflow用户

发布于 2011-05-06 00:55:03

“快照”这个术语意味着构建是在给定时间内代码的快照。

这通常意味着这个版本仍在大力开发中。

当代码准备就绪,是时候发布它时,您将希望更改POM中列出的版本。然后,你可以使用"1.0“这样的标签,而不是”快照“。

有关版本控制的一些帮助,请查看Semantic Versioning specification

票数 81
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5901378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档