2011-07-02 3 views
6

Remarque: ce sujet traite de l'écriture d'un Mojo personnalisé, sans utiliser de plugin. Je maintiens un testing plugin pour Maven Malheureusement, depuis presque un an maintenant, j'ai laissé cet inconnu persister et j'aimerais vraiment savoir comment le traiter afin que ses utilisateurs puissent avoir une configuration plus simple.Ecrire un plugin Maven/Mojo: comment faire un but force l'exécution d'autres objectifs?

Disons que nous avons deux objectifs dans notre plug-in:

  • prepare (phase: generate-sources)
  • do (phase: compilation)

Je veux configurer le do Mojo pour exiger que prepare ait été exécuté dans la phase antérieure de la construction. Cependant, rien dans le descriptor documentation ne suggère que je peux.

L'utilisateur ne se soucie probablement pas du but de l'objectif prepare, donc je ne veux pas les forcer à le spécifier dans leur POM. Bien sûr, je pourrais exécuter le Mojo directement à partir de do, mais l'objectif prepare aura été exécuté plus tard que prévu.

(j'ai regardé custom lifecycles, mais qui fait apparaître que tous ceux qui ont déjà l'objectif prepare dans leur POMs l'aura exécuté deux fois lors de l'exécution do.)

Répondre

3

Vous pourriez avoir quelque chose comme ci-dessous (extrait de le 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 
*/ 

en réglant ce sur votre classe, il exécutera au cours de la phase de compilation (dans cet exemple). La phase de compilation nécessite que toutes les phases précédentes aient été exécutées en premier (validate, generate-sources, process-sources, generate-resources, process-resources ...).

Fondamentalement, choisissez une phase après celle dont vous avez besoin (ou même la même) et cela devrait fonctionner.

+0

Ainsi, comment spécifier que le 'do' Mojo se lierait à la phase de compilation par défaut et s'appellerait' compile' comme but, mais malheureusement je ne vois pas comment il est écrit "oh et assurez-vous que 'prepare' a été couru en premier ". À ce stade, il semble que la seule réponse est un cycle de vie personnalisé ... que j'ai travaillé, mais je ne suis pas sûr que j'aime encore. –

+0

Intéressant. Peut-être pourriez-vous essayer le canal IRC#maven dans irc.codehaus.org. Peut-être que certains des gars auront une meilleure suggestion. – carlspring

+0

Pourquoi la downvote? Oui, il s'agit de la méthode la plus ancienne basée sur la non-annotation, mais elle est toujours valide. – carlspring

Questions connexes