Maven Snapshot到底是什么,为什么我们需要它?
我对Maven快照的含义有点困惑,为什么我们构建一个?
我对Maven快照的含义有点困惑,为什么我们构建一个?
Maven 中的快照版本是尚未发布的版本。
这个想法是,在发布(或任何其他版本)完成之前,存在一个.该版本可能会成为 .它基本上是“正在开发中”。这可能接近真正的版本,或者相当远(例如,在发布之后)。1.0
1.0-SNAPSHOT
1.0
1.0
1.0
0.9
“真实”版本和快照版本之间的区别在于快照可能会获得更新。这意味着今天下载可能会给出与昨天或明天下载不同的文件。1.0-SNAPSHOT
通常,快照依赖关系应该只存在于开发过程中,任何已发布的版本(即没有非快照)都不应该依赖于快照版本。
其他三个答案为您提供了对版本的良好见解。我只是想添加一些关于Maven在发现依赖关系时的行为的信息。-SNAPSHOT
SNAPSHOT
构建应用程序时,Maven 将在本地存储库中搜索依赖项。如果在那里找不到稳定版本,它将搜索远程存储库(在 或 中定义)以检索此依赖项。然后,它会将其复制到本地存储库中,以使其可用于下一个构建。settings.xml
pom.xml
例如,一个库被视为稳定版本,如果 Maven 在本地存储库中找到它,它将把这个库用于当前版本。foo-1.0.jar
现在,如果你需要一个库,Maven会知道这个版本不稳定,可能会发生变化。这就是为什么 Maven 会尝试在远程存储库中查找较新版本的原因,即使该库的版本在本地存储库中也能找到。但是,此检查每天仅进行一次。这意味着,如果您的本地存储库中有一个(即此库已在 2011/05/06 的 11:00:00 生成),并且如果您在同一天再次运行 Maven 构建,Maven 将不会检查存储库中的较新版本。foo-1.0-SNAPSHOT.jar
foo-1.0-20110506.110000-1.jar
Maven 为您提供了一种在存储库定义中更改此更新策略的方法:
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
其中可以是:XXX
SNAPSHOT
(设置的模型.xml可以在这里找到)