【问题标题】:Maven2 life cycle helpMaven2生命周期帮助
【发布时间】:2008-11-27 03:00:54
【问题描述】:

我使用 Ant 构建了一个自定义 Maven2 插件。我想在自定义 Ant 插件成功完成后立即调用另一个 maven 插件,特别是 Cargo Maven2 插件。但是,我不想将 Cargo 插件附加到另一个目标或阶段。有没有办法让它们连续运行而无需编写批处理脚本?是否可以让自定义 Ant 插件调用 Cargo 插件?

【问题讨论】:

    标签: maven-2 maven-plugin


    【解决方案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感兴趣

        GMaven 插件允许您使用 groovy 编写 maven 插件。这使您可以使用Ant Builder 完全访问 ant,这是在 Groovy 中编写 ant 脚本的一种非常简单的方法。 然后在这个 Groovy mojo 中,您可以使用 Mojo Executor 调用任何 maven mojo。

        我已经在几个自定义 maven 插件中使用了这些,但我还没有找到更简单的方法来编写和组合 mojos。

        【讨论】:

          猜你喜欢
          • 2010-12-21
          • 1970-01-01
          • 1970-01-01
          • 2013-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-10
          • 2021-09-14
          相关资源
          最近更新 更多