Maven:使用SNAPSHOT针对版本范围进行开发,但针对固定版本进行发布

时间:2011-12-08 00:19:20

标签: maven maven-3 maven-release-plugin

对于任何中等复杂的软件项目,您可以快速获得复杂的依赖链。

考虑以下依赖关系树:

  A --> B --> C
     `--------^

A和B都依赖于C.随着每个项目的发展,固定的依赖关系会阻止持续集成。 (例如,如果使用A所需的修复更新C,则B的依赖性也需要进行更新...)使用semantic版本控制,我们可以使模块与版本范围保持一致,而无需经常调整poms。

[实际上这个图表更复杂。我们不应该将所有内容组合到一个多模块项目中(或以其他方式组合它们),因为这会破坏模块化。我们希望使用持续集成构建模块化软件。]

但是,部署的版本应该是不可变的。他们所依赖的版本应该是固定的,因此今天发布的版本(+依赖项)与明年使用的版本相同。

目标

  • 开发人员处理SNAPSHOT版本(在本地或从Hudson中选择SNAPSHOT依赖项)
  • 发布是针对最新(兼容)发布的依赖项版本(不包括SNAPSHOT)
  • 发布永远是不可改变的。取决于A = 1.0.0将始终引入相同版本的B和C

问题

  • 在Maven中执行此操作的最佳方式是什么?是否有描述此用例的链接/文档?
  • maven发布插件可以解析版本范围并将其烘焙到发行版中吗?

鉴于

  • 默认情况下,maven(3.0.3)会在版本范围内选择SNAPSHOT依赖项。
  • 可以将SNAPSHOT和版本部署到单独的存储库

有没有更好的方法与maven持续集成?

1 个答案:

答案 0 :(得分:0)

如果任何依赖项是SNAPSHOT,则不会释放发布插件。这就是maven如何确保发布是不可变的。创建一个小型的多模块测试项目并在其上运行发布插件。然后你会更好地理解它的行为 - 这就是我必须做的事情。

我参与了一个包含405个POM的多模块项目,由Jenkins构建并部署到Artifactory。