Maven中的SNAPSHOT是什么意思?

在Maven中,SNAPSHOT表示该版本还在开发中,是一个快照版本。它有以下特征:

  1. SNAPSHOT版本的构件每次构建时都会有不同的时间戳后缀,如1.0-SNAPSHOT、1.0-20200101.123000-1。这是因为SNAPSHOT版本每次会产生一个新的快照。
  2. 每次构建SNAPSHOT版本的项目时,Maven都会联网检查仓库中是否存在更新的SNAPSHOT依赖。如果存在会自动下载最新版本。
  3. 部署SNAPSHOT版本的构件时,Maven会删除较旧的版本,保留较新的几个版本。这是为了防止SNAPSHOT版本过多。
  4. 发布正式版本时,需要将SNAPSHOT去掉,如1.0-SNAPSHOT变更为1.0。发布后就不再产生新的SNAPSHOT。
  5. SNAPSHOT依赖不会被锁定到具体版本,它总是指向最新版本。

使用SNAPSHOT主要有以下目的:

  1. 项目开发过程中用于测试,可以随开发获取最新的改动。
  2. 与其他项目进行集成测试,项目依赖使用SNAPSHOT可以随自己项目改动获取依赖的最新版本。
  3. 方便开发人员之间的工作,通过不断改动和构建可以及时看到最新的进展。
    例如,POM中SNAPSHOT依赖的声明:
<dependencies>
  <dependency>
    <groupId>com.example</groupId>
    <artifactId>api</artifactId>
    <version>1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

每次Maven构建时,它会去检查仓库是否有更新的1.0-SNAPSHOT,如果有会下载最新的快照版本。
所以,总的来说,SNAPSHOT版本主要用于项目开发过程中,它可以随项目改动随时获取依赖的最新进展,方便开发与测试。但发布正式版本时,一定要将SNAPSHOT去除。