java – 什么是Maven Snapshot,为什么我们需要它?

我对Maven Snapshot的含义以及为什么要构建一个它有点困惑?


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

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

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

通常,快照依赖项应该在开发期间存在,并且没有发布的版本(即没有非快照)应该依赖于快照版本。


另外三个答案可以让您对-SNAPSHOT版本的内容有一个很好的了解。我只是想在发现SNAPSHOT依赖时添加一些关于Maven行为的信息。

构建应用程序时,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可以:

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

(可以在这里找到settings.xml的模型


 

“SNAPSHOT”术语表示构建是给定时间代码的快照。

它通常意味着该版本仍处于重大开发阶段。

当需要发布代码时,您需要更改pom中列出的版本。所以不要使用“SNAPSHOT”而是“1.0”。

有关版本控制的一些帮助,请查看语义版本控制规范


“发布”是版本的最终版本,不会发生变化。

“快照”是一个构建,可以由具有相同名称的另一个构建替换。这意味着构建可能随时发生变化,并且仍处于积极发展阶段。

基于相同的代码,您有不同构建的不同工件。例如,你可能有一个调试,一个没有。一个用于Java 5.0,一个用于Java 6.通常,只需一个构建即可完成所需的一切。;)


Maven版本可以包含字符串文字“SNAPSHOT”,表示项目当前处于活动开发状态。

例如,如果您的项目具有版本“1.0-SNAPSHOT”并且您将此项目的工件部署到Maven存储库,那么如果您要在11部署版本,Maven会将此版本扩展为“1.0-20080207-230803-1” :2008年2月7日下午8点UTC。换句话说,当您部署快照时,您不会发布软件组件; 您将在特定时间发布组件的快照。

所以主要是快​​照版本用于正在开发的项目。如果您的项目依赖于正在进行开发的软件组件,则可以依赖快照发布,并且Maven将在您运行构建时定期尝试从存储库下载最新快照。同样,如果系统的下一个版本的版本为“1.8”,那么在项目正式发布之前,您的项目将具有“1.8-SNAPSHOT”版本。

例如,以下依赖项将始终下载spring的最新1.8开发JAR:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>1.8-SNAPSHOT”</version>
    </dependency>

Maven的

maven发布过程的一个例子

添加评论

友情链接:蝴蝶教程