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

2022-08-31 03:59:01

我对Maven快照的含义有点困惑,为什么我们构建一个?


答案 1

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

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

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

通常,快照依赖关系应该只存在于开发过程中,任何已发布的版本(即没有非快照)都不应该依赖于快照版本。


答案 2

其他三个答案为您提供了对版本的良好见解。我只是想添加一些关于Maven在发现依赖关系时的行为的信息。-SNAPSHOTSNAPSHOT

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

例如,一个库被视为稳定版本,如果 Maven 在本地存储库中找到它,它将把这个库用于当前版本。foo-1.0.jar

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

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

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

其中可以是:XXX

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

(设置的模型.xml可以在这里找到)


推荐