Question

J'ai un plugin personnalisé que j'exécute sur tous nos projets dans le cadre de la version: Perform but.

Nous commençons tout juste à utiliser des versions multi-modules, et je remarque que mon plugin ne fonctionne que sur le module supérieur. Que dois-je faire à mon plugin pour le faire fonctionner individuellement sur tous les modules à la fin de la version? Dois-je les itérer dans le code du plugin lui-même? Si c'est le cas, y a-t-il un exemple de le faire, car d'après ce que je vois, mavenproject.getModules () renvoie simplement une liste de noms de chaînes de ces modules, et je ne vois pas comment obtenir des informations pour ces modules (mon plugin a besoin Le groupe GroupID: ArtefactId: Version de chacun, et dans ce cas, les modules n'ont pas toujours la même version).

J'ai essayé avec et sans @aggregator, mais cela ne change rien par rapport à mon problème.

Je suppose que c'est le même cas que l'exécution du plugin directement (non lié à une phase) de CLI, qui ne fonctionne également que sur le niveau supérieur du projet, et des rapports ont sauté pour tous les sous-modules.

J'utilise Maven 3.0.3.

Était-ce utile?

La solution

J'ai eu le même problème avec mon plugin Maven. Il n'était invoqué qu'une seule fois (généralement pour le premier module du réacteur), et je l'ai finalement tracé au fait que mon plugin avait l'annotation maven "@requirsroject false". Il semble que le réacteur Maven n'appelle que ces plugins une seule fois. Une fois que je suis passé à "@RequireSproject True", mon mojo a été invoqué une fois pour chaque module. Je ne me connectais pas à la sortie: effectuez, alors ymmv.

Quant à accéder à tous les modules, au lieu d'utiliser mavenproject.getModules () qui donne leurs noms, vous pouvez injecter leurs objets MavenProject comme ceci:

   /**
    * The projects in the reactor.
    *
    * @parameter expression="${reactorProjects}"
    * @readonly
    */
   private List<MavenProject> reactorProjects;

Attention à @aggregator lors de la liaison aux phases du cycle de vie. "Lorsqu'il est lié à un cycle de vie, un mojo d'agrégateur peut avoir des effets secondaires désagréables. Il peut forcer l'exécution de la phase de cycle de vie pour exécuter à l'avance, et peut entraîner des versions qui finissent par exécuter la phase ... deux fois." référence

Comment forcer un mojo maven à être exécuté une seule fois à la fin d'une construction? A quelques alternatives à @aggregator.

Autres conseils

En utilisant le nouveau maven-plugin-annotations Vous pouvez également injecter:

@Component
private MavenSession session;

et appeler session.getProjects() (Maven 3) ou session.getSortedProjects() (2).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top