synyx
05.11.2012Problem mit Maven 3 Dependency Resolution
Im Zuge meiner Bachelorarbeit habe ich ein Projekt von Maven 2 nach Maven 3 migriert.
Dabei bin ich beim bauen des Projekts mit Maven 3 ein paar mal über eine etwas verwirrende Fehlermeldung gestolpert.
Das Problem:
Could not find artifact XXX in nexus.synyx.de (http://nexus.synyx.de)
…und das obwohl das Artefakt in der richtigen Version sowohl lokal als auch im Remote-Repository vorhanden ist.
Die Ursache:
It’s not a bug, it’s a feature!
Nach etwas Recherche hat sich dann herausgestellt, dass es sich dabei um ein Maven-3-Feature handelt mit – sagen wir – unglücklich gewählter Fehlermeldung.
Seit Maven 3 merkt sich Maven in den _maven.repositories-Dateien für jedes Artefakt auch das Repo aus dem es runtergeladen wurde. Das stellt unter anderem sicher, dass auch wirklich das richtige Artefakt benutzt wird. Außerdem werden so auch nicht eingetragene Repositories aufgedeckt.
Allerdings kann es durch die wenig aussagekräftige Fehlermeldung bei Benutzern leicht zur Verwirrung kommen.
Die Lösung:
Tritt dieses Probelm auf sollte man als erstes kontrollieren ob alle Repositories in der POM und der settings.xml richtig angegeben sind und dies dann gegebenenfalls nachholen.
Sollte die Fehlermeldung immer noch auftreten hilft ein:
cd ~/.m2/repository/PFAD/ZUM/ARTEFAKT/
rm _maven.repositories
Ein weiterer Grund die Datei zu löschen wäre wenn man z.B. explizit wünscht, dass das Artefakt aus dem lokalen Maven-Repository benutzt wird.