1

据我所知,快照正在开发中,即1.0-SNAPSHOT是最终将发布为1.0的东西。Maven的CI/CD任何使用快照的概念是什么?

但为什么我需要它?

这里是流量:

  • 我开发库,语义版本Major.Minor.Revision[.Build]模型。
  • Revision(或Build)由CI/CD管道自动增加PR被接受
  • 后和门构建成功运行的新版本发布到公司的专用仓库我明确地定义MajorMinor
  • 在依赖项目中,我指定了精确版本或浮动版本Major.+

在这里有SNAPSHOT的地方吗?

+0

许多优秀的问题都会根据专家的经验产生一定程度的意见,但对这个问题的回答往往基于意见而非事实,参考或具体专业知识。 –

+0

@GUIDO是否意味着'SNAPSHOT'只是一种便利功能,并没有关于它的最佳实践? –

+1

@PavelVoronin这意味着即使使用'SNAPSHOT'可能会有好的或不好的做法。但他们可能主要是基于意见的。 – nullpointer

回答

2

这是一个很大的话题。让我评论一下我们公司相关的一些观点。

  • 我们构建包含具有大型依赖树的jar的ear文件。在开发过程中,你经常需要在树中深入修复。如果您使用SNAPSHOT版本,则每个人都会在下一个版本中自动绘制这些更改。如果你使用内部版本号,结果必须从下到上传播,也就是说,如果你有一个依赖关系层次结构A-> B-> C并且你构建了一个新版本的C,那么你需要一个新版本的B,然后一个A的新版本。或者,您可以在最高级别(本例中为耳朵级别)上管理具有dependencyManagement的版本,以避免在jar C中修复bug修改后重建所有内容。

  • 我们的开发人员需要构建“ “在开发过程中向客户展示他们。这些通常构建为SNAPSHOT版本,而不是放入部署管道。 SNAPSHOT版本允许您从语义上区分这些版本和那些要提高生产力的版本。

  • 快照之间的区别和释放的版本可以作为一个快速的方法来猜测工件的质量(如果所有文物都有数XYZ,这是好的,哪些是不好的?)

  • 构建重现是一个重要的目标,但从与开发人员的讨论中我知道,对此有不同的看法。一些开发人员认为版本更新是“自动”发生的 - 他们说“最新版本总是正确的版本,我为什么要做所有这些手动更新?”

+0

有几个关于'SNAPSHOT'的时刻对我来说并不清楚。我什么时候更改版本以发布?如果一切都是自动的,那么“按下按钮”应该开始部署,即发布到具有正确版本的“maven-releases”。其次,当我开发我的项目时,我是否应该确实使用'SNAPSOTS'作为依赖项?如果我这样做,何时以及如何再次发布版本? –

+1

这些都是我们正在考虑的问题。如果你想构建“潜在可行的东西”,我将开始部署管道并构建发布版本。如果您的IDE中有项目A和项目B,并且A取决于B,那么建立您在A中使用的B的本地SNAPSHOT版本会很有用,因为您获得了快速反馈。如果您在一个组中处理多个工件,则发布SNAPSHOT版本可能会很有用,以便您组中的其他人员可以针对他们开发这些工具。实际上很难定义SNAPSHOT和release之间的确切边界。 –