我对 Maven 快照的含义以及为什么我们要构建一个感到有点困惑?
原文由 meisam 发布,翻译遵循 CC BY-SA 4.0 许可协议
我对 Maven 快照的含义以及为什么我们要构建一个感到有点困惑?
原文由 meisam 发布,翻译遵循 CC BY-SA 4.0 许可协议
其他三个答案让您清楚地了解什么是 -SNAPSHOT
版本。我只是想添加一些有关 Maven 发现 SNAPSHOT
依赖项时的行为的信息。
当您构建应用程序时,Maven 将在 本地 存储库中搜索依赖项。如果在那里找不到稳定版本,它将搜索远程存储库(在 settings.xml
或 pom.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
可以是:
SNAPSHOT
版本将作为稳定库处理。原文由 Romain Linsolas 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
Maven 中的快照版本是尚未发布的版本。
这个想法是, 在
1.0
发布(或任何其他发布)完成之前,存在一个1.0-SNAPSHOT
。该版本 可能会变成1.0
。它基本上是“1.0
正在开发中”。这可能 接近于 真正的1.0
版本,或者相当远(例如,就在0.9
版本之后)。“真实”版本和快照版本之间的区别在于快照可能会得到更新。这意味着今天下载
1.0-SNAPSHOT
可能会得到与昨天或明天下载不同的文件。通常,快照依赖项应该 只 在开发期间存在,发布版本(即没有非快照)不应该依赖于快照版本。