2009-11-14 50 views
2

我有一个多模块maven项目(几个级别的嵌套)。通常,当我执行一个maven构建(如mvn install或其他)时,maven会在之前为子项目运行父项目的所有目标。孩子完成后在父母上执行目标

我希望能够定义在父级上运行的目标,但直到所有子级都被处理完为止。有没有办法做到这一点?

具体来说,我想要做的是运行一个exec:exec目标,该目标递减查找测试结果文件的文件系统,并将它们复制到中央位置,以通过我们的CI系统(巡航控制)进行聚合。所以,也欢迎这个问题的替代解决方案:)

更新:我忘了提及一个要求:我需要执行目标运行,无论构建是否成功。

+0

关于更新,这不可能是CI工具的责任? – 2009-11-16 20:38:28

回答

2

基于其他答案和我自己的后续调查,它看起来并不像我所描述的可能与Maven一样。

但是,我能解决我的问题,虽然解决方案是特定于巡航控制。基本上,我将我的执行目标限制在现场阶段,然后在巡航控制配置中指定为现场前的sitegoalsitegoal在主要目标之后运行,并且不管构建是否成功,都这样做。

我想其他CI系统提供类似的东西..

2

我不认为在多模块构建结束时从父项执行任何操作都是不可能的(这不仅仅是工作原理)。但是,您是否考虑添加一个模块(可能是pom类型),具体取决于所有子项目(因此它将成为反应器构建中的“最后一个”项目)并在此模块中运行exec:exec?我可能会错过一些东西,我不明白为什么这不起作用。

+0

这适用于基本情况,但在模块是例如Spring Boot应用程序。那些没有很好的依赖关系。 – Zajo 2017-10-24 15:54:23

0

为什么不在每个子项目的验证阶段附加一个antrun复制步骤,以便将结果复制到父级位置。然后,您可以在父级中执行CI聚合。

或者,您可以让每个子项目都使用simliar techneque进行自己的CI集成。

我们毫不犹豫地使用该技术来为jar生成websphere ejb存根,除此之外。

1

听起来更像是一个报告插件。创建一个Maven插件其实很简单。