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