一尘不染

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

java

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


阅读 748

收藏
2020-03-01

共2个答案

一尘不染

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

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

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

通常,快照依赖关系仅应在开发期间存在,并且任何发行版本(即,非非快照)都不应依赖快照版本。

2020-03-01
一尘不染

当你构建应用程序时,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可以在哪里:

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