【发布时间】:2010-11-15 12:13:47
【问题描述】:
我有一个多模块 maven 项目,我希望能够在所有子模块完成执行后运行操作 (antrun)。
在我的项目中,我从每个子模块构建 RPM,在部署阶段,我将 RPM(通过 ssh)复制到 RPM 存储库。
RPM 存储库要求我在添加新 RPM 后运行 createdb 命令,以便它可以索引它们。
所以我有一个实际运行 scp 并将 RPM 复制到 repo 的 antrun。它为每个实际产生 RPM 的子模块运行,并与 maven deploy 阶段挂钩。我能做的是在每个 scp 运行 createrepo 命令之后,但这会很浪费,我有 10 多个子模块,每个 createrepo 大约需要一分钟,所以我会浪费宝贵的构建时间。
我想做的是在所有子模块完成之后,然后运行 createrepo。一次。
我的第一次尝试是将调用 createrepo 命令的 antrun 挂接到父 pom(超级 pom)的 deploy 阶段。我这样做了,问题是父级的部署阶段在子模块的部署阶段之前运行。我希望它在之后运行
我无法将 createrepo antrun 附加到任何其他后期阶段,因为部署阶段是生命周期中的最后一个阶段。
所以我的问题是:在所有子模块的所有构建操作都成功结束后,有没有办法运行“清理”antrun 或一般会执行一次的插件?
解决它的方法是创建另一个子模块,并通过使其依赖于所有其他模块并从该模块的部署阶段运行 createrepo 来确保它是最后一个。但这很丑陋且难以维护。我更喜欢更清洁的解决方案。
谢谢
Maven 版本是 2.2.1
【问题讨论】:
-
你有没有想出更好的解决方案?