如何在单个阶段内执行多个Maven插件并设置它们的执行顺序?

17

我想把Maven生命周期中的某些阶段分成子阶段。我希望控制从一个子阶段到另一个子阶段的执行流程,有点像使用ant依赖性。

例如,在打包阶段,我想使用NSIS插件将我的项目打包成安装程序,但是要在我的项目被打包成war文件后。我想在打包阶段完成所有操作。

这种做法可行吗?


Maven是否按照pom文件中列出的顺序依次执行绑定到同一生命周期阶段的插件目标?这只是一个猜测,值得测试一下... - Péter Török
不知道... 我会试一试。 - Yaneeve
2个回答

13

绑定到相同阶段的插件应该按照它们在 POM 中列出的顺序执行。在某些情况下(例如,如果您将同一个插件绑定到两个阶段,比如 antrun 插件),可能会出现无法执行的情况,但这是一个 bug(参见 MNG-2258 和相关问题 MNG-3719)。


但是,如果您将它们指定为不相关的块,例如普通构建块与配置文件块中的构建块呢?配置文件块中可能有一些插件应该在插件块中的插件之后运行,但其他插件则不需要。 - mxk
9
这种情况在 Maven 3.0.4 中不会发生。我有两个插件,它们的执行绑定到 generate-sources,其中一个排在列表中第一位,另一个排在最后一位。然而,排在最后一位的插件(依赖于排在第一位的插件)总是先执行。 - matt5784
同意matt5784的说法,这真的很烦人 :( - Hendy Irawan
也同意matt5784的看法。有任何已知的解决方法吗? - David Witherspoon
1
解决方法:按所需顺序排序并反转。我已经测试过,可行 :) - Dormouse
1
所列出的错误据称已在Maven 3.0.3中修复。http://www.mkyong.com/maven/maven-plugin-execution-order-in-same-phase/ - Paul D. Eden

6
我遇到了同样的问题。看看如何在Maven2构建中执行有序任务。 由于不同的目标绑定到一个阶段的哈希图或其他无序结构中,导致执行顺序随机。 我的解决方案是将任务分散到不同的阶段,但我认为在您的情况下没有太多意义(nsis打包不是预集成测试)。 您可以尝试以下方法之一:
1)尝试运气,看看Maven是否为您选择了正确的顺序(您可能已经尝试过了)
2)使用独立插件-在生命周期外运行目标。类似于:mvn package org.codehaus.mojo:nsis-maven-plugin:1.0:compile。
3)将它们分成模块:有一个包含两个子模块的父pom,一个是您的war项目,另一个是nsis项目。
4)通过更改类型使用自定义生命周期,在您的情况下,您可以使用“exe”。这是通过使用自定义插件扩展(使用扩展指南)完成的。

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

希望这能给您带来新的想法。

Ronen


谢谢,但除了默认生命周期的一些“小问题”外,@Pascal是正确的。 - Yaneeve
1
这些都没有“问题”。实际上,如果你问Maven的开发人员,他们会告诉你,第三种方法最符合“Maven方式”,即模块的分离。当你想一想,创建Web应用程序和安装程序项目是两个不同的事情,这样做非常有意义。 - rperez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接