与Maven一起发布

时间:2011-03-12 19:28:32

标签: java svn maven hudson maven-release-plugin

我最近发布了一个maven项目,并且无法停止认为整个过程非常复杂且容易出错。假设我有一个应用程序,它包含3个模块A,B和C,每个模块在subversion中都有自己的文件夹,在Hudson中有一个单独的构建作业。每个模块都有一个父POM,它聚合了多个工件。 A依赖于B,B依赖于C.依赖版本在顶级POM D中定义,它是A,B和C的父级。除了确保所有版本都保存在一个地方之外别无其他整个项目中使用的每个工件只有一个版本。为了发布,我执行以下操作:

  1. 通过Hudson发布最新版本的POM D。
  2. 从没有进一步依赖性的C开始。
  3. 更改C以使用发布插件引用已发布的D. Release C版本。
  4. 在D中输入已发布的C版本,因此可以使用稳定版本的C发布依赖于C的模块。
  5. 使用发布插件再次发布D.
  6. 为B
  7. 做3-5
  8. 为A
  9. 做3-5

    之后,我在A,B和C中拥有所有工件的稳定非快照构建,并且可以将它们组合在一起,形成应用程序的最终稳定版本。

    实际上,我不仅有3个,而且还有20个这样的模块。现在我发现这个程序非常复杂,我认为它有很多潜在的问题:

    • 我需要多次发布D,一次为依赖层次结构中的每个级别。最后我有D只有稳定版本的A,B和C。为了继续下一个开发版本,我必须再次编辑D并引用已发布模块的所有新快照版本。通常,即使使用发布插件,依赖项管理也必须手动完成。

    • 如果有人在我正在发布时提交它可能会搞砸事情。为了确保我必须检查所有模块的特定修订,构建并测试它,然后对该修订版上的所有模块执行发布。但是我如何确保Hudson和多个工作?

    • 取决于3个不同的系统:Subversion服务器,Hudson服务器和Maven存档服务器。如果只有一个人失败,我就不能再释放了。

    • 耗时。在这个过程中,我发布的每个模块都会反复进行大量的构建,打包,上传,下载,提取等工作。发生了大量与存档的冗余数据交换。但实际上一切都可以在本地完成,因为Hudson拥有它需要的所有源代码。最后一次包装需要上传。

    • 假设我松开了存档服务器上的软件包。没有简单的方法可以告诉Hudson检查标记版本并按正确的顺序重建它们。

    为什么这不像一次性检查所有代码,调整一个全局版本,构建和测试它,提交,标记提交以及最终上传二进制文件一样简单?

    感谢你提出任何想法。

2 个答案:

答案 0 :(得分:1)

这可能很容易。使用父pom,您可以将所有模块指向同一父模块。然后将子模块版本设置为:${version.properties},当您运行构建时,使用mvn -Dversion.properties x.y.x-SNAPSHOT(对于dev)或x.y.z运行生成构建,然后将所有模块部署在一次使用相同的版本。

因此,要在settings.xml中指定<version.properties>1.1.1-SNAPSHOT</version.properties>进行自动构建,那么如果需要已发布的产品,请在运行时使用-Dx.y.z指定其他参数来覆盖settings.xml文件

唯一的技巧是你的父pom需要有一个非动态指定的版本,并且还需要在所有子文档中设置。因此,在每次发布后,您可能需要手动更新该版本号(尽管可能有一个插件)

答案 1 :(得分:0)

如果你总是同步发布模块,我会为整个项目提供单个父pom,其中包括所有模块,并确保所有版本都相同。当您发布顶级时,它会按顺序释放所有模块,并且一次性使用正确的版本。