L'exécution d'un spécifique plugin Maven but depuis la ligne de commande dans un sous-module d'un multi-module de réacteur projet
Je suis à la recherche d'un général de technique ici, mais nous allons donner un exemple précis. J'ai un multi-projet de module et je voudrais le exec:java
objectif à partir de la ligne de commande à l'encontre de l'un des sous-modules de mon projet.
Je connais une approche est que je peux courir mvn install
sur l'ensemble du projet et ensuite il suffit d'aller dans le sous-répertoire du module, exécutez la exec:java
commande à partir de la ligne de commande, et ont des artefacts résolus à mon dépôt local. Mais l'exécution mvn install
tout le temps devient assez fastidieux.
Ce que j'aimerais vraiment, c'est la capacité à exécuter exec:java
contre le Maven réacteur, où la classe est construite à partir des modules actifs du projet dans le Maven réacteur. Le problème est que je ne suis pas sûr que cela est possible. Une approche naïve consiste à exécuter le exec:java
objectif à partir de la racine du projet, mais cette tente d'exécuter le plugin à l'encontre de chaque module dans le projet, par opposition à la cible du module, je suis intéressé.
Une idée? Je sais que mon exemple motivant était exec:java
, mais vraiment il y a un certain nombre de plugin objectifs que j'aimerais à l'encontre de mon projet de temps en temps en dehors de la portée de la version complète du cycle de vie.
Vous devez vous connecter pour publier un commentaire.
Je ne dis pas que cela va répondre avec précision à vos cas d'utilisation, mais il est possible d'exécuter un but sur un sous-ensemble d'un multi-modules de construire à l'aide de la
-pl, --projects <arg>
option:De la résolution des dépendances est en effet assuré par le référentiel local.
Ce n'est pas vraiment ce qu'est un réacteur de construire n'. Un réacteur de construire construit un graphe orienté des modules, tire un approprié ordre de construction de ce graphe et exécute le but de la phase de contre les modules dans le calcul de l'ordre. Un réacteur de construire n'est pas de construire une "global" classpath.
Bien, c'est le comportement attendu. Il ne semble pas être ce que vous cherchez.
Un réacteur de construire ne permettent cela, mais, comme je l'ai écrit, vous semblez être à la recherche de quelque chose de différent. Peut-être que Si vous préciser exactement à vos besoins, je voudrais être en mesure de fournir une meilleure réponse.
Il y a un autre moyen qui vous permet de choisir plusieurs modules pour exécuter un plugin.
De nombreux plugins ont un
skip
option, que vous pouvez activer sur la racine du projet en fixant sa valeur àtrue
. L'exécution des plugins seront ignorés par défaut pour tous les sous-modules d'alors. Sous-modules qui doit exécuter le plugin pouvez définir explicitementskip
àfalse
. Vous avez encore besoin de configurer les non-attributs facultatifs à la racine du projet.Exemple de la
exec-maven-plugin
avec la configuration pour leexec:exec
objectif:<executable>
dans la balise parentpom.xml
et ajouter<mainClass>none</mainClass>
pour supprimer le message d'erreur.Un peu général, technique que j'ai utilisé dans ce cas est de définir un profil de dans le sous-module POM en question qui se lie exec:java à la phase de test. Par exemple:
Puis à partir du haut de votre projet, exécutez:
Ce sera mis en place, l'inter-module classpath comme d'habitude, et essayez d'exécuter le test de java profil dans tous vos projets. Mais depuis que l'on a le profil défini, il est le seul qui va faire quelque chose.
Il prend un petit peu de temps supplémentaire pour Maven à moudre à travers vos autres sous-projets NOOPing, mais c'est pas si mal.
Une chose à noter est que le sous-projet est exécuté avec le répertoire de plus haut niveau que le répertoire de travail courant (pas le sous-projet de répertoire). Il n'y a pas beaucoup que vous pouvez faire pour contourner cela, mais espérons que ce ne sera pas vous causer des ennuis.
Pascal suggestion est probablement ce que vous voulez. Notez qu'il n'est pas possible actuellement d'abord compiler les dépendances, puis exécuter (
exec:exec
etc.) l'application, en une seule commande Maven: https://jira.codehaus.org/browse/MNG-5059