# [Maven] neuerdings "No plugin found for prefix ..." errors



## dermoritz (7. Nov 2012)

Mein Projekt wird seit ewigen Zeiten so gebaut:


```
-Pci -PintegrationTest clean verify findbugs:findbugs pmd:pmd emma:emma checkstyle:checkstyle
```

nun habe ich zwei Abhängigkeiten aktualisiert (GWT 2.4 ->GWT 2.5 und das gwt-maven-plugin 2.4->2.5). Nun erhalte ich folgenden Fehler beim bauen:


```
org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException: No plugin found for prefix 'findbugs' in the current project and in the plugin groups
```

Das konnte ich beheben indem ich das findbugs plugin auch unter "PluginManagement" im Parent-Modul eingetragen habe.
Nun erhalte ich aber die selbe Fehlermeldung für "emma". Emma habe ich nirgend als plugin eingetragen - ich werde es nachholen. Ich schätze die selben Fehler bekomme ich dann für "pmd" und "checkstyle"?!

aber was verursacht diese Fehler? - so plötzlich?


----------



## maki (7. Nov 2012)

Hi Moritz,

zeig doch mal die Poms


----------



## dermoritz (8. Nov 2012)

Da sich bis auf die Version einer Abhängigkeit und eines Plugins nichts geändert hat (von dem ich weiß) kann es eigentlich nicht an der pom als ganzes liegen?!
Die parentpom hat ca. 200 Zeilen und das Modul mit dem Hauptprojet hat eine pom mit ca. 500 Zeilen - die poste ich mal nicht. Aber die Dinge die ich geändert habe und mit denen es jetzt läuft. Wie gesagt ich   würde gerne wissen wieso ich plötzlich wie emma oder finbugs explizit im parent deklarieren muss (plugins aus standard plugin-groups)

Alsi in einem Modul steht z.B.:

```
<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-pmd-plugin</artifactId>
					<version>2.5</version>
					<configuration>
						<targetJdk>1.6</targetJdk>
					</configuration>
				</plugin>
```

Das brachte plötzlich den genannten Fehler (das Ziel pmdmd funktionierte plötzlich auf dem parent nicht mehr)
Nun hab ich den obigen Code unter Plugin-Management im Parent eingetragen und es funktioniert wieder. (Meine Philosophie war immer im Plugin/Dependency Management nur gemeinsam genutzte Dinge einzutragen, da es nur 2 Module gibt: das eigentliche Projekt und ein Projekt für Integrationstests)


----------



## kama (9. Nov 2012)

Hallo,




dermoritz hat gesagt.:


> Nun hab ich den obigen Code unter Plugin-Management im Parent eingetragen und es funktioniert wieder. (Meine Philosophie war immer im Plugin/Dependency Management nur gemeinsam genutzte Dinge einzutragen, da es nur 2 Module gibt: das eigentliche Projekt und ein Projekt für Integrationstests)


Die Frage ist somit, ob Du im Parent POM (Unternehmens pom) auch für die genutzten Plugins diese auch entsprechend im pluginManagement mit entsprechender Version eingetragen hast...

Wenn nicht verstehe ich das Problem. Für Plugins die nicht mit der Version festgelegt sind, kann es sein, dass Maven z.B. nach dem löschen des lokalen Repositories neuere Versionen zieht als vorher oder auch oft auf Build Systemen beobachtet, da dort meist immer ein Repository bezogen auf den Workspace konfiguriert wird.

Mit Maven einen reproduzierbaren Build zu bekommen bedeutet, dass man alle Plugins die man verwendet immer in einer Unternehmens pom im pluginManagement Block festlegt...

Gruß
Karl-Heinz Marbaise


----------



## dermoritz (9. Nov 2012)

Danke für deine Info kama (ich hate auf eine Antwort von dir gehofft ):

Aber so richtig verstehe ich es noch nicht. Also vorher war im Repository z.B. findbugs vorhanden und deshalb wusste maven was es bei findbugs:findbugs machen soll.

Dann löscht man es aus dem Repository und dann fehlt die Info welche version er braucht? Das versteh ich nicht, wird nicht eine "default-version" festgelegt?
Also release und compile plugin funktionieren doch auch ohne diese Angabe - die Version ist dann halt nicht kontrolliert sondern irgendwie willkürlich, oder?

Also sollten eigentlich in meinem Fall einfach die entsprechenden Plugins in irgendeiner Version geladen werden - sind ja alle aus Standardplugin-Groups?


----------



## kama (10. Nov 2012)

Hi,

wenn in Maven die Plugin Version nicht festgelegt ist, dann wird automatisch die aktuellste Version genommen. 

Die "default-version" ist eben die neueste...

Wenn Du den Build mit Maven 3 laufen gelassen hast hättest Du eigentlich eine Warning bzgl. einer fehlenden Plugin Version bekommen müssen. (Ich vermute, dass Du das übersehen hast!).

Die Konsequenz daraus ist, eben alle Plugins mit entsprechender Version in einer Unternehmens pom festzulegen (pluginManagement).
Ich vermute, dass für das release und compile plugin die Versionen irgendwo festgelegt wurden. 

Das was Du geschrieben hast bzgl. 





> ...die Version ist dann halt nicht kontrolliert sondern irgendwie willkürlich, oder?


 trifft es genau. Aus diesem Grunde steht auch als "Best Practise" eben alle Plugins per pluginManagement in der Version zu fixieren (zu pinnen).

Die "Standard Plugin Group" meinst Du "org.apache.maven.plugins" mit nehme ich an? 

Gruß
Karl-Heinz Marbaise


----------



## maki (10. Nov 2012)

> Ich vermute, dass für das release und compile plugin die Versionen irgendwo festgelegt wurden


Seit Maven 2.0.10 wird für die "Standard" Plugins eine Version festgelegt, allerdings ändert sich die mit der verwendeten Maven Version.

Maven - Release Notes - Maven 2.0.10

Wenn man reproduzierbare Builds will, muss man eben alle Plugin Version festlegen (pluginManagement).

Das Depdency Plugin und das Version Plugin können helfen solche unschärfen zu finden und zu beheben, und natürlich die Maven Log Ausgabe, nur weil die groß ist darf man die nicht immer ignorieren.

Ich lasse mir gerne mal die effective Pom ausgeben, da stehen dann die verwendeten Versionen drinnen (auch die nicht definiert wurden), das übertrage ich dann per Copy & Paste in die pluginManagement Sektion.


----------



## dermoritz (12. Nov 2012)

Danke für den Hinweis auf das neue Maven. In meinem Falle hab ich seit Ewigkeiten 3.0.3 - insbesondere auf dem CI. Mir ist bewusst, dass ich jetzt die saubere Lösung habe. Ich finde es nur nach wie vor sehr seltsam, dass dies überhaupt passiert ist. Ich kann mich auch an Maven-Warnungen erinnern, die einen darauf hinweisen eine Version festzulegen. Für die dort genannten plugins hab ich dann auch getan nur findbugs, emma, pcm wurden nicht genannt und so sind die hinten runtergefallen - bis jetzt.


----------

