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