Maven2生命周期帮助
Posted
技术标签:
【中文标题】Maven2生命周期帮助【英文标题】:Maven2 life cycle help 【发布时间】:2008-11-27 03:00:54 【问题描述】:我使用 Ant 构建了一个自定义 Maven2 插件。我想在自定义 Ant 插件成功完成后立即调用另一个 maven 插件,特别是 Cargo Maven2 插件。但是,我不想将 Cargo 插件附加到另一个目标或阶段。有没有办法让它们连续运行而无需编写批处理脚本?是否可以让自定义 Ant 插件调用 Cargo 插件?
【问题讨论】:
【参考方案1】:请参阅此讨论:Re: calling plugin in another plugin? 根据 Maven 开发人员的说法,这不是插件应该工作的方式。
但是,有这样一个有趣的评论:
插件/Mojos 应该是库周围的薄包装。你会想直接使用这个库。
Cargo 不仅是一个 Maven 插件,它还有一个 Java API 和一个Ant task。所以你可能会:
从您的 Ant mojo 中调用 Cargo Ant 任务(我认为您只需要插件类路径中的 Cargo JAR);
用 Java 重写您的 Ant mojo,并调用 Cargo API(您需要查看 Cargo 插件的源代码)。
【讨论】:
【参考方案2】:maven-ant-plugin 执行的 Ant 脚本并不真正了解 Maven。此插件旨在向后兼容自定义 Ant 任务。我想不出一种干净的方式来做你想做的事,尽管可能有某种黑客可以让你做到这一点。
还应该可以从 Ant 内部执行第二个 Maven 实例,它纯粹运行 Cargo 目标,但在这种情况下,您可能会遇到锁定文件等问题。这样做的方法是在 Ant 脚本中使用一个标签,然后调用带有适当目标作为参数的“mvn”可执行文件。
最简洁的方法是简单地将 Cargo 目标绑定到构建的一个阶段,并在 Ant 完成后运行该阶段。我认为这种方法没有任何缺点 - 你没有真正说明你想要避免它的任何具体原因。
【讨论】:
【参考方案3】:你可能对以下两个maven感兴趣
The Mojo Executor plugin 和 The GMaven pluginGMaven 插件允许您使用 groovy 编写 maven 插件。这使您可以使用Ant Builder 完全访问 ant,这是在 Groovy 中编写 ant 脚本的一种非常简单的方法。 然后在这个 Groovy mojo 中,您可以使用 Mojo Executor 调用任何 maven mojo。
我已经在几个自定义 maven 插件中使用了这些,但我还没有找到更简单的方法来编写和组合 mojos。
【讨论】:
以上是关于Maven2生命周期帮助的主要内容,如果未能解决你的问题,请参考以下文章