2010-03-24 54 views
17

我想将maven生命周期中的某些阶段分解为子阶段。我想控制从一个子阶段到另一个阶段的执行流程,有点像蚂蚁依赖。如何在单个阶段内执行多个Maven插件并设置各自的执行顺序?

例如,我想使用NSIS插件将我的项目打包到包装阶段的安装程序中,之后我的项目被打包成一个war文件。我想在包装阶段做所有的事情。

这可能吗?

由于

+0

不Maven的执行势必它们在POM列出的顺序相同的生命周期阶段插件的目标?只是一个猜测,可能值得测试... – 2010-03-24 16:47:46

+0

不知道...我会试一试 – Yaneeve 2010-03-24 17:12:38

回答

13

插件绑定到相同的相位应,因为它们在POM中列出的相同的顺序执行。在某些情况下(例如,如果您将相同的插件绑定到阶段两次,如antrun插件),这可能不会发生,但这是一个错误(请参阅MNG-2258和相关问题MNG-3719)。

+0

但是如果你在不相关的块中指定它们,比如普通构建块与构建块的配置文件块?在配置文件块中可能会有一些插件在插件块中的插件之后运行,但其他插件可能不会。 – Matthias 2011-11-02 10:37:03

+9

这不会发生(至少在maven 3.0.4中)。我有两个执行绑定到生成源的插件,其中一个列在约6个插件的列表中,另一个列在最后。但是,最后列出的一个(取决于首先列出的那个)总是首先执行。 – matt5784 2012-05-23 18:32:52

+0

同意matt5784,这很烦人:( – 2012-07-27 23:51:48

6

我有同样的问题。看看How to perform ordered tasks in Maven2 build。 由于某种原因,绑定到阶段的不同目标被存储在哈希映射或其他无序结构中,这使得执行顺序是随机的。 我的解决方案是将任务分散到不同的阶段,但我不认为您的案例中有太多的意义(nsis包装不是预集成测试)。 您可以执行下列操作之一:

1)试试你的运气,看看Maven的chosses您正确的顺序(你可能尝试过的话)

2)使用独立的插件 - 运行外的目标生命周期。例如: mvn包org.codehaus.mojo:nsis-maven-plugin:1.0:编译。

3)将它们分成模块:有一个包含两个子模块的父包,一个是你的战争项目,另一个是nsis项目。

4)通过改变类型来使用自定义生命周期,在你的情况下你可以使用“exe”。这是通过使用自定义插件扩展(guide to using extension

5)使用jetspeed-mvn-maven-plugin。我从来没有用过它,但它似乎与您的需求有关。

希望这给你新的想法。

罗南

+0

谢谢,但除了默认生命周期@Pascal的一些“扭结”是对的 – Yaneeve 2010-03-25 09:21:28

+1

那些没有“扭结”。实际上,如果你问Maven家伙,他们会告诉你,第3号最符合模块分离的“Maven方式”,当你考虑它时,创建Web应用程序和安装程序项目是两件独立的事情。 – rperez 2010-03-25 11:44:49