3

我有一个多模块 maven 项目(多层嵌套)。通常,当我执行 maven 构建(例如或其他)时,maven 将在继续处理子项目之前mvn install运行父项目的所有目标。

我希望能够定义一个在父级上运行的目标,但要等到所有子级都已处理完毕。有没有办法做到这一点?

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

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

4

4 回答 4

2

我认为在多模块构建结束时不可能从父级做事(这不是事情的工作方式)。但是,您是否考虑过根据所有子项目添加一个模块(可能是 pom 类型)(因此它将是反应堆构建中的“最后一个”项目)并exec:exec在此模块中运行?我可能会遗漏一些东西,因为我不明白为什么这不起作用。

于 2009-11-14T10:15:06.297 回答
2

根据其他答案和我自己的后续调查,我所描述的内容似乎不适用于 Maven。

但是,我能够解决我的问题,尽管该解决方案特定于巡航控制。基本上,我将我的 exec 目标绑定到 pre-site 阶段,然后将 pre-site 指定为sitegoal我的巡航控制配置中的。在sitegoal主要目标之后运行,并且无论构建是否成功都这样做。

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

于 2009-11-18T17:40:34.123 回答
1

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

于 2009-11-16T14:00:24.050 回答
0

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

或者,您可以让每个子项目使用类似的技术进行自己的 CI 集成。

我们现在使用该技术为 jar 生成 websphere ejb 存根,等等。

于 2009-11-16T02:36:21.863 回答