2010-03-24 2 views
17

Je voudrais décomposer certaines phases du cycle de vie de Maven en sous-phases. Je voudrais contrôler le flux d'exécution d'une sous-phase à une autre, un peu comme avec les dépendances ant. Par exemple, je voudrais utiliser le plugin NSIS afin d'empaqueter mon projet dans un installateur à l'étape de l'emballage, APRÈS que mon projet ait été empaqueté dans un fichier war. Je voudrais faire tout cela lors de la phase d'emballage.Comment puis-je exécuter plusieurs plugins Maven en une seule phase et définir leur ordre d'exécution respectif?

Est-ce possible?

Merci

+0

Est-ce que Maven pas exécuter les objectifs liés à la Plugin même phase du cycle de vie dans l'ordre où ils apparaissent dans le pom? Juste une supposition, peut-être la peine de tester ... –

+0

Ne sait pas ... Je vais essayer – Yaneeve

Répondre

13

Plugins liés à la même phase devrait être exécuté dans le même ordre que sont répertoriés dans le POM. Dans certaines circonstances (par exemple si vous liez deux fois le même plugin à une phase, comme le plugin antrun), ceci peut ne pas se produire mais c'est un bug (voir MNG-2258 et le problème associé MNG-3719).

+0

mais que faire si vous les spécifiez dans des blocs sans rapport, comme le bloc de construction normal par rapport à un bloc de construction qui fait partie d'un bloc de profil? Il peut y avoir des plugins dans le bloc de profil qui devraient fonctionner après ceux du bloc plugins, mais d'autres ne le peuvent pas. – Matthias

+9

Cela ne se produit pas (au moins dans Maven 3.0.4). J'ai deux plugins avec des exécutions liées à generate-sources, l'une listée en premier dans la liste d'environ 6 plugins et l'autre listée en dernier. Cependant, celui listé en dernier (qui dépend de celui listé en premier) s'exécute toujours en premier. – matt5784

+0

D'accord avec matt5784, c'est ennuyeux :( –

6

J'ai eu le même problème. regarder How to perform ordered tasks in Maven2 build. pour une raison quelconque, les différents objectifs liés à une phase sont stockés dans une carte de hachage ou une autre structure non ordonnée qui rend aléatoire l'ordre d'exécution. ma solution était de répartir les tâches en différentes phases mais je ne pense pas qu'il y ait beaucoup de sens pour cela dans votre cas (nsis packaging n'est pas pré-test d'intégration). vous pouvez faire une des opérations suivantes:

1) tenter votre chance et voir si Maven chosses l'ordre pour vous (vous avez probablement essayé déjà)

2) utiliser le plugin autonome - exécuter l'objectif en dehors de la cycle de la vie. quelque chose comme: package mvn org.codehaus.mojo: nsis-maven-plugin: 1.0: compile.

3) les séparer en module: avoir un pom parent contenant deux sous-modules, un - votre projet de guerre et l'autre pour le projet nsis. 4) utiliser un cycle de vie personnalisé en changeant le type, dans votre cas, vous pouvez utiliser "exe". ceci est fait en utilisant une extension de plugin personnalisée (guide to using extension)

5) utilisez le jetspeed-mvn-maven-plugin. Je ne l'ai jamais utilisé mais il semble pertinent à vos besoins.

espérons que cela vous donne de nouvelles idées.

Ronen

+0

Merci, mais à l'exception de quelques "kinks" avec le cycle de vie par défaut @Pascal est juste – Yaneeve

+1

ce ne sont pas "kinks". En fait, si vous demandez aux gars Maven, ils vous diront que le numéro 3 est en accord avec la "méthode Maven" qui est la séparation des modules et quand vous y réfléchissez, il est très logique de créer une application web et un projet d'installation sont deux choses distinctes. – rperez

Questions connexes