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

我对Maven快照的含义有些困惑,为什么我们要创build一个呢?

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

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

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

通常情况下,快照依赖关系应该在开发过程中存在,并且没有发布版本(即没有非快照)应该对快照版本有依赖性。

其他三个答案为您提供了一个很好的-SNAPSHOT ,看看一个-SNAPSHOT版本是什么。 我只是想在MavenfindSNAPSHOT依赖时添加一些关于Maven行为的信息。

在构build应用程序时,Maven将在本地存储库中search依赖项。 如果没有find稳定的版本,它将search远程存储库(在settings.xmlpom.xml定义)来检索这个依赖关系。 然后,它会将其复制到本地存储库,以供下一个版本使用。

例如,一个foo-1.0.jar库被认为是一个稳定的版本,如果Maven在本地版本库中find它,它将会使用这个版本作为当前版本。

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

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

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

其中XXX可以是:

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

(可以在这里findsettings.xml的模型)

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

这通常意味着该版本仍处于重大的发展阶段。

当需要发布你的代码的时候,你需要更改pom中列出的版本。 所以不是有一个“SNAPSHOT”你会有像“1.0”的东西。

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

“发布”是不改变版本的最终版本。

“快照”是一个可以被具有相同名称的另一个版本replace的版本。 这意味着build筑可以随时改变,并且仍在积极发展。

基于相同的代码,您可以为不同的构build创build不同的工件。 例如,你可能有一个debugging和一个没有。 一个用于Java 5.0,另一个用于Java 6.一般来说,更简单的是拥有一个可以完成所有工作的构build版本。 ;)

这就是存储库的快照,在这种情况下没有启用,这意味着这里提到的存储库是稳定的,不需要更新。

 <project> ... <repositories> <repository> <id>lds-main</id> <name>LDS Main Repo</name> <url>http://code.lds.org/nexus/content/groups/main-repo</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project> 

另一种情况是:

 <snapshots> <enabled>true</enabled> </snapshots> 

这意味着Maven将查找此存储库的更新。 您也可以使用标签指定更新间隔。

通常在maven我们有两种types的构build1)快照构build2)发布构build

1)快照构build:SNAPSHOT是指示当前部署副本不像常规版本的特殊版本,maven检查远程存储库中每个构build的版本,因此快照构build只是维护构build。

2)发布构build:发布意味着在构build版本中删除SNAPSHOT,这是常规构build版本。

Maven版本可以包含一个string文字“SNAPSHOT”来表示一个项目目前正在开发中。

例如,如果您的项目具有“1.0-SNAPSHOT”版本,并且将此项目的构件部署到Maven存储库,那么如果您想在11版本中部署版本,Maven会将此版本扩展到“1.0-20080207-230803-1” :2008年2月7日08点08。 换句话说,当你部署一个快照时,你并没有发布一个软件组件。 您将在特定时间发布组件的快照。

所以主要的快照版本被用于正在积极开发的项目。 如果您的项目依赖于处于活动开发阶段的软件组件,则可以依赖快照版本,Maven将在运行构build时定期尝试从存储库下载最新的快照。 同样,如果您的系统的下一个版本将要有一个版本“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发布过程的一个例子

在这里输入图像描述