我有一个多模块maven项目(几个级别的嵌套)。通常,当我执行maven构建(如mvn install
或其他)时,maven将在继续处理子项之前运行父项目的所有目标。
我希望能够定义在父级上运行的目标,但是直到所有子级都已处理完毕。有没有办法做到这一点?
具体来说,我想要做的是运行一个exec:exec
目标,该目标会递归文件系统,寻找测试结果文件并将它们复制到一个中心位置,以便我们的CI系统(cruisecontrol)进行聚合。因此,也欢迎这个问题的替代解决方案:)
更新:我忘了提一个要求:无论构建是否成功,我都需要运行exec目标。
答案 0 :(得分:2)
我不认为在多模块构建结束时可以从父级做事情(这不是事情的工作原理)。但是,您是否考虑根据所有子项目添加模块(可能是pom类型)(因此它将成为反应堆构建中的“最后”项目)并在此模块中运行exec:exec
?我可能会遗漏一些东西,但我不明白为什么这不起作用。
答案 1 :(得分:2)
基于其他答案和我自己的后续调查,它看起来不像我描述的Maven可能。
然而,我能够解决我的问题,尽管该解决方案特定于巡航控制。基本上,我将我的exec目标绑定到pre-site阶段,然后在我的cruisecontrol配置中指定pre-site为sitegoal
。 sitegoal
在主要目标之后运行,无论构建是否成功,都会这样做。
我想其他CI系统提供了类似的东西..
答案 2 :(得分:1)
听起来更像是一个报告插件。创建Maven插件实际上非常简单。
答案 3 :(得分:0)
为什么不将附加复制步骤附加到每个子项目的验证阶段,以将结果复制到父位置。然后,您可以在父级中执行类似的步骤来执行CI聚合。
或者,您可以让每个子项目使用simliar techneque进行自己的CI集成。
我们当前使用该技术为jar生成websphere ejb存根,等等。