Maven 2 编写Maven插件/Mojo:如何使目标强制执行其他目标?

Maven 2 编写Maven插件/Mojo:如何使目标强制执行其他目标?,maven-2,maven-plugin,Maven 2,Maven Plugin,注意:此线程是关于编写自定义Mojo,而不是使用插件 我为Maven保留了一份工作。不幸的是,近一年来,我一直让这个特殊的未知问题困扰着我,我真的很想知道如何处理它,以便它的用户可以有一个更简单的配置 假设我们的插件有两个目标: 准备(阶段:生成源) do(阶段:编译) 我想将doMojo配置为要求在构建的早期阶段执行prepare。然而,这本书中没有任何内容表明我能做到 用户可能不关心或不理解prepare目标的要点,所以我不想强迫他们在POM中指定它。当然,我可以直接从do执行Mojo,

注意:此线程是关于编写自定义Mojo,而不是使用插件

我为Maven保留了一份工作。不幸的是,近一年来,我一直让这个特殊的未知问题困扰着我,我真的很想知道如何处理它,以便它的用户可以有一个更简单的配置

假设我们的插件有两个目标:

  • 准备
    (阶段:生成源)
  • do
    (阶段:编译)
我想将
do
Mojo配置为要求在构建的早期阶段执行
prepare
。然而,这本书中没有任何内容表明我能做到

用户可能不关心或不理解
prepare
目标的要点,所以我不想强迫他们在POM中指定它。当然,我可以直接从
do
执行Mojo,但是
prepare
目标将在比预期更晚的阶段运行


(我进行了调查,但这似乎表明,在POM中已经有了
prepare
目标的每个人都会在运行
do
时执行两次)

您可以有如下内容(摘自CompilerMojo):

/**
*@作者
*@version$Id:CompilerMojo.java 941498 2010-05-05 21:24:11Z krosenvold$
*@自2.0以来
*@goal编译
*@阶段编译
*@threadSafe
*@requiresDependencyResolution编译
*/
通过对类进行设置,它将在编译阶段执行(在本例中)。编译阶段要求先执行前面的所有阶段(
validate、generate sources、process sources、generate resources、process resources
…)


基本上,在你需要的阶段之后选择一个阶段(甚至是同一个阶段),它应该会工作。

这就是如何指定默认情况下
do
Mojo将绑定到编译阶段,并将其命名为
compile
,作为目标,但不幸的是,我看不到它是如何说“哦,确保先运行'prepare'。在这一点上,看起来唯一的答案是定制生命周期。。。我已经开始工作了,但我不确定我是否喜欢。很有趣。也许你可以试试IRC.codehaus.org上的#maven IRC频道。也许那里的一些人会有更好的建议。为什么要投否决票?是的,这是较旧的非基于注释的方法,但它仍然有效。
/**
 * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
 * @version $Id: CompilerMojo.java 941498 2010-05-05 21:24:11Z krosenvold $
 * @since 2.0
 * @goal compile
 * @phase compile
 * @threadSafe
 * @requiresDependencyResolution compile
 */