2011-12-08 68 views
2

对于任何中等复杂的软件项目,您都可以快速结束复杂的依赖关系链。Maven:针对带SNAPSHOT的版本范围进行开发,但针对固定版本进行发布

考虑以下依赖关系树:

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

A和B取决于C.由于每个项目的发展,固定依赖性防止持续集成。 (例如,如果C更新为A所需的修复,则B的依赖也将需要修改...)使用semantic版本控制,我们可以保持模块与版本范围一致,而无需不断调整poms。

[实际上这个图更复杂。我们不应该把所有东西都组合到一个多模块项目中(或者将它们组合起来),因为这会挫败模块化。我们要建立模块化软件持续集成]

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

目标

  • 开发商对快照发布工作(采摘快照依赖在本地或从哈德森)
  • 发布是针对最新的(兼容)由发布依赖的版本(不包括快照)
  • 版本永远是不可变的。

    • 是什么在Maven来做到这一点的最好办法:根据A = 1.0.0将始终B和​​C
    相同版本

    问题带来了什么?有没有描述这个用例的链接/文档?

  • maven release插件可以解析版本范围并将它们烘焙到版本中吗?

鉴于

  • 通过默认的Maven(3.0.3)的版本范围拿起快照依赖。
  • 快照并释放可被部署到单独的存储库

是否有这样做与Maven持续集成的更好的办法?

回答

0

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

我使用Jenkins构建的部署到Artifactory的405多POM构建多模块项目。

+0

并且在版本中是否锁定版本范围?如果A 1.0取决于B [1.0,2.0)。这个依赖范围在版本A中是否存在? –

相关问题