Frage

Ich habe ein benutzerdefiniertes Plugin, das ich im Rahmen des Release:Perform-Ziels auf allen unseren Projekten ausführe.

Wir fangen gerade erst an, Builds mit mehreren Modulen zu verwenden, und mir ist aufgefallen, dass mein Plugin nur auf dem obersten Modul läuft.Was muss ich mit meinem Plugin machen, damit es am Ende der Veröffentlichung auf allen Modulen einzeln läuft?Muss ich sie im Plugin-Code selbst durchlaufen?Wenn ja, gibt es ein Beispiel dafür, denn soweit ich weiß, gibt MavenProject.getModules() nur eine Liste der String-Namen dieser Module zurück und ich kann nicht sehen, wie ich Informationen für diese Module erhalten kann (die mein Plugin benötigt). die groupId:artifactId:version von jedem, und in diesem Fall haben die Module nicht immer die gleiche Version).

Ich habe es mit und ohne @aggregator versucht, aber das ändert nichts an meinem Problem.

Ich gehe davon aus, dass dies derselbe Fall ist wie die direkte (nicht an eine Phase gebundene) Ausführung des Plugins über die CLI, die ebenfalls nur auf der obersten Ebene des Projekts ausgeführt wird und für alle Untermodule SKIPPED meldet.

Ich verwende Maven 3.0.3.

War es hilfreich?

Lösung

Ich hatte das gleiche Problem mit meinem MAVEN-Plugin. Es wurde nur einmal aufgerufen (allgemein für das erste Modul im Reaktor), und ich verfolgte es schließlich darauf, dass mein Plugin die MAVEN-Anmerkung "@RequiresProject FALSE" hatte. Es scheint, dass der MAVEN-Reaktor nur einmal solche Plugins auftrifft. Nachdem ich auf "@RequireSproject True" umgestellt habe, wurde mein Mojo für jedes Modul einmal aufgerufen. Ich habe mich nicht in Release angeschlossen: Führen Sie also, so YMMV.

Wenn Sie auf alle Module auf alle Module zugreifen, anstatt MAVENPROJECT.GETMODULES (), die ihren Namen gibt, können Sie ihre MAVENPROJECT-Objekte so injizieren: generasacodicetagpre.

achten Sie auf @Aggregator auf, wenn Sie an Lifecycle-Phasen binden. "Wenn Sie an einen Lebenszyklus gebunden sind, kann ein Aggregator MOJO einige unangenehme Nebenwirkungen haben. Es kann die Ausführung der ... Lebenszyklus-Phase zwingen, sich vor der Zeit auszuführen, und kann zu Builds führen, die das Ende der ... Phase ausführen zweimal." ref

Wie erzwingen Sie ein Maven Mojo, um nur einmal am Ende eines Builds auszuführen? hat einige Alternativen zu @aggregator.

Andere Tipps

Das Neue nutzen maven-plugin-annotations Sie können auch Folgendes injizieren:

@Component
private MavenSession session;

und Ruf an session.getProjects() (Maven 3) oder session.getSortedProjects() (2).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top