Maven快照仓库 vs 发布仓库

121

快照(Snapshot)仓库和发布(Release)仓库有何区别?

这是关于设置仓库(如Artifactory、Nexus等)的参考。


这与什么有关?源代码控制吗?据我所知,这不是标准术语,但我猜测快照被用作某一时刻源代码树的图片(可能供内部使用),而发布则用于外部发布的代码。 - 1800 INFORMATION
5个回答

107

发布存储库包含发布版本,快照存储库则包含快照版本。在Maven中,“快照”被定义为版本号以“-SNAPSHOT”结尾的构件。当部署时,快照会被转换成一个时间戳。按照定义,快照是可变的,而发布版本是不可变的。这就是Nexus要求你将它们分别存储的原因,因为通常你不在乎是否丢失快照,但如果你失去了发布版,你就会非常关心。这样做使快照清理更加容易处理。


20
感谢您提供的内容。翻译为:当部署时,快照将转换为时间戳。 - datv
当我在Jenkins上配置作业并使用上传构件到Nexus快照仓库时,我无法看到多个快照。 通常情况下,当我们在项目中进行更改并触发构建时,会创建一个新的构件。 尽管这确实发生了,但它将其重命名为相同的1.0-SNAPSHOT,而不是应该命名为2.0-SNAPSHOT等等... 需要帮助... @Brian Fox - frp farhan
我在Jenkins的后构建部分中使用了部署工件到Maven仓库的功能,并将其配置为Nexus的快照仓库。 - frp farhan
我使用Maven和Gradle已经多年了,直到最近才明白这个问题。 - Sridhar Sarnobat

81

发布物

这些是特定的、时点的发布版本。 发布的构件被认为是坚固、稳定和永久的,以确保依赖于它们的构建可以随时间复现。 发布的JAR构件与PGP签名和校验和相关联,以验证二进制软件构件的真实性和完整性。 中央Maven存储库存储发布物。

快照物件

快照捕获正在进行中的工作,并在开发过程中使用。 快照构件具有版本号,例如“1.3.0”或“1.3”和时间戳。 例如,commons-lang 1.3.0的快照构件可能具有名称commons-lang-1.3.0-20090314.182342-1.jar。

摘自参考指南卡片


Sayat,1.1.0.M51.1.0.M4 是快照版本之一吗? - Alexander Suraphel
7
这段话解释了发布版本和快照版本的定义。但问题是:是否需要两个不同的仓库? - dna
1
在 https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855 找到了写得很好的信息。 - Yoav Epstein
2
这并没有回答问题,问题是关于发布和快照_repository_(而不是_artifacts_)之间的区别。 - mks-d
1
@mks-d 很好的观察,但是如果不先了解那个“something”是什么,很难理解它的存储库。 :) https://dev59.com/52025IYBdhLWcg3wnXWg#5901460 - datv

5
通常在Maven中有两种构建类型:
1) 快照构建: SNAPSHOT是特殊版本,表示当前部署副本而不是常规的特定版本。 Maven会在远程仓库中为每个构建检查版本。快照构建只是开发构建。
2) 发布构建: 发布意味着在版本ID中删除SNAPSHOT以进行构建。这些是常规的构建版本。
快照工件和发布工件分别推送到快照、发布存储库中。

3
快照是Maven的一个想法,用于给版本号加上“-SNAPSHOTS”,它正在开发中,可能随时会更改。
内部存储库是具有固定版本号的发布存储库。您可以修改快照,但该构件在发布后永远不会更改。

1
对于“它正在开发中,它随时可能会改变”(用于-SNAPSHOT)。 - datv

1
这里的“快照”并不是指一个被冻结且不会更改的快照,而是涵盖了几个快照,它们的修改量不足以用新的版本号来表示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接