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

Jus*_*rls 6 maven-2 maven-plugin

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

我为Maven 维护了一个测试插件.不幸的是,差不多一年了,我已经让这个特殊的未知世界挥之不去,我真的想知道如何处理它,以便其用户可以更简单的配置.

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

  • prepare (阶段:生成源)
  • do (阶段:编译)

我想配置doMojo以要求prepare在构建的早期阶段执行.但是,描述符文档中没有任何内容表明我可以.

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

(我查看了自定义生命周期,但这似乎使得每个已经prepare在POM中具有目标的人都会在运行时执行两次do.)

car*_*ing 3

您可能会得到如下所示的内容(取自 CompilerMojo):

/**
 * @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
 */
Run Code Online (Sandbox Code Playgroud)

通过在您的类上设置它,它将在编译阶段执行(在本例中)。编译阶段要求之前的所有阶段都首先执行(validate, generate-sources, process-sources, generate-resources, process-resources...)。

基本上,在您需要的阶段(甚至相同的阶段)之后选择一个阶段,它应该可以工作。