2011-07-02 12 views
6

Nota: este hilo trata de escribir un Mojo personalizado, sin usar un complemento.Escribiendo un Plugin/Mojo de Maven: ¿cómo se hace que un objetivo fuerce la ejecución de otros objetivos?

Mantengo un testing plugin para Maven. Desafortunadamente, durante casi un año, dejé que este particular desconocido permanezca y me gustaría saber cómo manejarlo para que sus usuarios puedan tener una configuración más simple.

Digamos que tenemos dos goles en nuestro plugin:

  • prepare (fase: generate-fuentes)
  • do (fase: compilar)

Quiero configurar el do Mojo para requerir que prepare se haya ejecutado en la fase anterior de la compilación. Sin embargo, nada en el descriptor documentation sugiere que puedo.

El usuario probablemente no le importe o entienda el objetivo de la meta prepare, por lo que no quiero obligarlos a especificarlo en su POM. Por supuesto, podría ejecutar el Mojo directamente desde do, pero luego el objetivo prepare se habrá ejecutado en una fase posterior a la prevista.

(I mirado en custom lifecycles, pero eso hace que parezca que todos los que ya tiene el objetivo prepare en su POM tendrá que ejecuta dos veces al ejecutar do.)

Respuesta

3

Usted podría tener algo como el siguiente (tomado de la CompilerMojo):

/** 
* @author <a href="mailto:[email protected]">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 
*/ 

estableciendo esta por encima de su clase, se ejecutará durante la fase de compilación (en este ejemplo). La fase de compilación requiere que todas las fases anteriores se hayan ejecutado primero (validate, generate-sources, process-sources, generate-resources, process-resources ...).

Básicamente, elija una fase después de la que necesita (o incluso la misma) y debería funcionar.

+0

Así es como especificar que el 'do' Mojo se uniría a la fase de compilación de forma predeterminada y se llamaría' compile' como un objetivo, pero desafortunadamente no veo cómo dice "oh y asegúrese de que 'prepare' se ejecutó primero ". En este punto, parece que la única respuesta es un ciclo de vida personalizado ... que tengo funcionando pero no estoy seguro de que me guste aún. –

+0

Interesante. Tal vez podrías probar el canal de IRC#maven en irc.codehaus.org. Quizás algunos de los muchachos tendrán una mejor sugerencia. – carlspring

+0

¿Por qué el voto a favor? Sí, esta es la forma antigua no basada en anotaciones para hacerlo, pero sigue siendo válida. – carlspring

Cuestiones relacionadas