Maven: Artefaktdeskriptor konnte nicht gelesen werden

258

Ich hoffe, jemand kann mir bei einem Problem helfen, mit dem ich zu kämpfen habe.

Wenn ich versuche, mein Projekt vom Terminal aus zu erstellen, wird folgende Fehlermeldung angezeigt:

Failed to read artifact descriptor for com.morrislgn.merchandising.common:test-data-utils:jar:0.3b-SNAPSHOT: Could not find artifact com.morrislgn.merchandising:merchandising:pom:0.3b-SNAPSHOT

Das common.test-data-utilsJAR wird von einem separaten Projekt erstellt und zwischen diesem und einem anderen Projekt geteilt (das andere Projekt wird ebenfalls nicht erstellt, aber das liegt an einem anderen Problem).

Ich kann com.morrislgn.merchandising.common:test-data-utilsohne Probleme erstellen . Ich kann den Eintrag im .m2lokalen Repository auf meinem Computer sehen. Ich habe mein Repository auch in Eclipse neu indiziert.

Das POM für mein Projekt hat diesen Eintrag:

<dependency>
    <groupId>com.morrislgn.merchandising.common</groupId>
    <artifactId>test-data-utils</artifactId>
    <version>0.3b-SNAPSHOT</version>
</dependency>

Was mir richtig erscheint - das POM meldet auch keine Fehler, wenn es in Eclipse angezeigt wird.

Kann mir jemand sagen, was ich hier vermisse oder falsch mache?

Morrislgn
quelle

Antworten:

183

Sie können es immer versuchen mvn -U clean install

-U Erzwingt eine Überprüfung auf aktualisierte Releases und Snapshots in Remote-Repositorys.

Gal Bracha
quelle
40
@ MrPhi: Wenn Sie das m2e-Plugin haben, können Sie Maven -> "Update Project ..." verwenden. Im nächsten Dialogfeld können Sie Aktualisierungen von Snapshots und Releases erzwingen.
Aaron Digulla
1
@ AaronDigulla Es ist dieses Dialogfeld, das den Fehler für mich verursacht.
Jeroen
1
Damit dies funktioniert, sollten Sie den Befehl ausführen, der sich im Stammverzeichnis Ihres Projekts befindet
Daria
Ich hatte auch ein ähnliches Problem. Dies ist sehr hilfreich. Wenn Sie ein privates MVN-Repo verwenden, müssen Sie dies ~/.m2/setting.xmlzuerst zu Ihrem Spiegelabschnitt hinzufügen und dann nach dem Ausführen mvn -U clean installFolgendes sicherstellen Reimport(Rechtsklick auf das Projekt, dann befindet sich unter dem unteren MavenBereich eine ReimportSchaltfläche ).
JACK ZHANG
1
@TomaszWaszczyk: Ja, das gibt es. 1. Windows-Ansicht anzeigen-> Terminal. 2. Fügen Sie ein lokales Terminal hinzu. 3. cd PomFilePath 4. Führen Sie den Befehl aus
Vishnu Dahatonde
142

Dieses Problem kann auftreten, wenn Sie einige untergeordnete Projekte haben, die auf einen übergeordneten POM verweisen, und Sie nicht über das übergeordnete POM-Verzeichnis installiert haben (über das übergeordnete Verzeichnis ausführen mvn install). Eines der untergeordneten Projekte hängt möglicherweise von einem Geschwisterprojekt ab. Wenn es das POM des Geschwisters liest, schlägt es mit dem in der Frage genannten Fehler fehl, es sei denn, Sie haben mindestens einmal aus dem übergeordneten POM-Verzeichnis installiert.

Ich bin gerade auf dieses Problem gestoßen, als ich ein Projekt auf einen neuen Computer verschoben habe. Ich hatte die Angewohnheit, Befehle aus dem untergeordneten Projekt auszuführen und install nicht auf dem übergeordneten Projekt auszuführen.

bzuillsmith
quelle
13
Wenn Sie mvn installauf einem übergeordneten Element ausgeführt werden, können Sie außerdem eine -Nnicht rekursive Operation hinzufügen . Dies führt dazu, dass maven alle Module überspringt (einschließlich eines Moduls, das fehlschlägt) und nur das installZiel für das übergeordnete Modul erreicht .
Jacek Prucia
@ JacekPrucia gut zu wissen, dass ein Pom-Artefakt auch installiert werden muss (wenn Ihr Elternteil ein Pom ist)
Adrian
@bzuillsmith warum solltest du mvn installim übergeordneten pom laufen müssen . Würde dies nicht nur verwendet, damit die Geschwisterabhängigkeit heruntergeladen werden kann? Wenn Sie zufällig in das Geschwisterverzeichnis gegangen sind und mvn installvon dort aus gelaufen sind, sodass sich das JAR in Ihrem lokalen Repository befindet, führt dies nicht genau das Gleiche aus?
user2158382
Es ist ein paar Jahre her, seit ich maven verwendet habe, aber - Ja, ich glaube, Sie können die Geschwisterabhängigkeiten einzeln installieren. Die Installation vom übergeordneten Element aus ist in der Regel weniger aufwendig (weniger Befehle zum Eingeben und Ausführen). In großen Projekten kann es vorkommen, dass nicht alle untergeordneten Projekte installiert werden sollen. In diesem Fall müssten Sie sie einzeln ausführen.
Bzuillsmith
Mein Projekt wie ch-multip-spring \ simple-parent \ simple-model \ pom.xml, ich mache eine mvn-Neuinstallation aus dem Stammordner ch-multip-spring (nicht auch aus simple-parent), es löste mein Problem ähnlich zum Beitragstitel.
IcyBrk
104

Hatte das gleiche Problem mit IntelliJ IDEA und folgenden funktioniert.

  • Gehe zu File
  • Wählen Settings
  • Wählen Build, Execution, Deployments
  • Wählen Sie Build Toolsaus der Dropdown-Liste
  • Wählen Sie Mavenaus der Dropdown-Liste
  • Aktivieren Sie das Always update snapshotsKontrollkästchen

Screenshot von IntelliJ 2017.2> Einstellungen / Einstellungen> Erstellen, Ausführen, Bereitstellen> Build-Tools> Maven> Schnappschüsse immer aktualisieren (Kontrollkästchen)

Prime
quelle
1
Das hat bei mir funktioniert, aber ich verstehe nicht warum - ich habe versucht, über die Befehlszeile zu erstellen. Gab es etwas, das von IntelliJ zwischengespeichert wurde?
goodOldFashioned
Hat auch für mich gearbeitet! Ich kann nicht glauben, wie frustrierend das war. Vielen Dank!
Ben Arena
@ goodOldFashioned: Dieses "immer aktualisieren" überschrieb die .... lastUpdated-Datei aus dem lokalen Repository. -U macht dasselbe über die Kommandozeile. Also hat Intellij Ihr lokales Repo repariert und dann hat die Kommandozeile wieder funktioniert.
Frischling
Einfach und effektiv
Ojonugwa Jude Ochalifu
2
Nachdem ich im ganzen Internet
gestöbert hatte
37

Wenn Sie Eclipse verwenden, klicken Sie mit der rechten Maustaste auf Ihr Projekt -> Maven -> Projekt aktualisieren . Das Dialogfeld Update Maven Project wird geöffnet.

Aktivieren Sie in diesem Dialogfeld das Kontrollkästchen Aktualisierung von Snapshots / Releases erzwingen und klicken Sie auf OK . (Bitte siehe Bild unten)

Dialogfeld "Maven-Projekt aktualisieren"

Das hat bei mir funktioniert!

IamVickyAV
quelle
36

Wenn Sie Eclipse verwenden, klicken Sie mit der rechten Maustaste auf Projekt -> Eigenschaften -> Maven und stellen Sie sicher, dass nicht auf " Abhängigkeiten von Arbeitsbereichsprojekten auflösen " geklickt wird.

Hoffe das hilft.

tharindu_DG
quelle
4
Für mich geht das. Aber ich verstehe nicht warum? Irgendeine Erklärung dahinter?
Anand
1
das hat bei mir nicht geklappt, anfangs fehlten 12 anständigkeiten, danach ist es jetzt 74
user2044822
27

Ich weiß, dass ich ziemlich spät zum Gespräch komme, aber ich hatte auch dieses Problem. Ich denke, das Problem war die Firewall meines Unternehmens. Meine Lösung bestand darin, den Netzstecker aus dem Netzwerk zu ziehen, eine Verbindung zu unserem offenen WLAN herzustellen und dann ein Update über Eclipse zu erzwingen. Dies löste alles.

rrs
quelle
1
Danke Leute! Es hat bei mir funktioniert und viel Zeit gespart.
sagte Fagan
14

Ich hatte das gleiche Problem mit Eclipse, bei dem die Maven Build-Befehlszeile einwandfrei funktionierte, ABER versuchen Sie dies

  • Gehen Sie in .m2 / repository und löschen Sie das zugehörige Verzeichnis
  • Führen Sie Update-Maven-Abhängigkeiten in Eclipse aus

Der Fehler verschwindet ... warum meine mvn-Befehlszeile mit diesen Verzeichnissen funktioniert hat und Eclipse .m2eclipse nicht konnte, ich habe keine Ahnung und es ist irgendwie scheiße. Mein Projekt arbeitet jetzt wieder in Eclipse.

Dean Hiller
quelle
Nebenbei bemerkt, wir sind zu Gradle gewechselt ... so viel glücklicher als Ameise und Maven ... extrem schönes Setup.
Dean Hiller
Ich bin mir nicht mal sicher, ob es etwas mit Eclipse zu tun hat. Ich hatte das gleiche Problem mit IntelliJ und das Löschen der problematischen Pakete und das erneute Ausführen mvn clean installfunktionierten
Jay
12

Ich hatte das gleiche Problem mit IntelliJ. Ich habe mit einem Rechtsklick auf pom.xml> Maven> Reimport gelöst

rlopezo
quelle
Ja, so einfach ist das Leben. Wie auch immer, @prime answer hat bei mir funktioniert.
Imam Bux
10

Ich habe dieses Problem gelöst, indem ich in den Repository-Ordnern, in denen dieser Fehler angezeigt wurde, alles außer den JAR- und POM-Dateien gelöscht habe.

17sprints
quelle
Ich habe das gleiche Problem auch gelöst, indem ich verwandte Dateien im lokalen Maven-Repository gelöscht und dann das gesamte Projekt aktualisiert habe.
Ad Infinitum
8

Probleme beim "Lesen des Artefaktdeskriptors fehlgeschlagen" weisen im Allgemeinen auf ein Problem mit der POM-Datei der Abhängigkeit im Maven-Repository hin. Ich würde Ihnen empfehlen, zu überprüfen, ob der Name der POM-Datei mit dem Namen übereinstimmt, den Maven erwartet, und zu überprüfen, ob der Inhalt der POM-Datei gültig ist.

eaykin
quelle
1
Die Überprüfung der Datei pom.xml war hilfreich. Ich habe festgestellt, dass ich zweimal dieselbe Abhängigkeit hatte (Fehler beim Kopieren und Einfügen). Nach dem Aufräumen war alles in Ordnung.
Adam Boczek
8

Für mich war es mit dem Einstellen der "User Setting.xml" im Inneren verbunden

Window > preferences > Maven > User Settings > and then browsing to the user Settings inside the { maven unarchived directory / }/apache-maven-2.2.1/conf/settings.xml . 
Roshan Khandelwal
quelle
6

Ich habe ein Projekt

 A/
 |--a1
 |--a2

Jetzt gibt es ein anderes Projekt in unserer Organisation

 B/
 |--b1
 |--b2
 |--b3

(Jedes Modul a1, b1 usw. und übergeordnete Projekte A, B haben ihre eigene pom.xml gemäß den Standardregeln für Eltern und Kind.)

Beide Projekte werden auf meiner lokalen Eclipse (von SVN) ausgecheckt. Ich arbeite aktiv an A.

Ich habe erfahren, dass in B eine gute gemeinsame Funktionalität (b4) entwickelt wurde, die ich verwenden musste.

 B/
 |--b1
 |--b2
 |--b3
 |--b4 (NEW)

Entwickler von b4 haben dieses b4-Modul als Artefakt im Repository unserer Organisation bereitgestellt. Ich habe die Abhängigkeit zum POM meines Moduls aufgenommen, dh zur pom.xml von a2. Eclipse hat das erforderliche Artefakt von Repo heruntergeladen und ich konnte die Klassen darin importieren.

Jetzt beginnt das Problem ... Ich musste den Quellcode von b4 aus irgendeinem Grund überprüfen und da ich B bereits auf meiner lokalen Eclipse ausgecheckt hatte, habe ich ihn von SVN aktualisiert und das Modul b4 ausgecheckt. Ich habe auch pom.xml von Modul b4 mit Zielen wie clean, package usw. ausgeführt. Nach einiger Zeit, als ich meine Codierung abgeschlossen hatte, musste ich eine JAR meines Moduls a2 erstellen. Ich habe "package" auf a2s pom.xml und BAM ausgeführt !! Fehler n Fehler für a2 Modul .. Diese Fehler waren auch nicht sehr benutzerfreundlich. Das einzige ist, dass der Name von b4 sicher in den Protokollen war.

Lösung: Nachdem ich viele Stunden lang nach vielen Lösungen gesucht hatte, führte ich "mvn -U clean install" von der Konsole in der Projektverzeichnis meines B aus (dh in ../codebase/B). Da B das übergeordnete Element ist, wurde der Befehl zur sauberen Installation für alle Module einschließlich b4 ausgeführt und erfolgreich ausgeführt. Danach habe ich "mvn -U clean install" für mein übergeordnetes Projekt A ausgeführt. Und das hat funktioniert! Das a2-Modul wurde erfolgreich kompiliert, installiert (später verpackt).

Hier war wichtiger Punkt, wenn b4 in Ihrem Arbeitsbereich ist, installieren Sie nicht nur b4. Sie müssen das vollständige B neu installieren. Ich bin auf diese Lösung gekommen, nachdem ich die Antwort von Zuill gelesen hatte

BEARBEITEN: Noch etwas zu beachten: Wenn ich das B-Projekt nicht in der lokalen Umgebung ausgecheckt hätte, wäre dieses Problem möglicherweise nicht bei mir aufgetreten. Ich neige dazu zu glauben, dass dies passiert ist, weil ich B in meinem lokalen Arbeitsbereich ausgecheckt habe.

simpleDev
quelle
5

Sie erwähnen zwei verschiedene Gruppen-IDs com.morrislgn.merchandising.commonund com.johnlewis.jec.webpim.common. Vielleicht ist das das Problem.

Phlogratos
quelle
Guter Ort - nein, es ist nicht unglücklich. Ich habe das falsche Tag aus dem POM-XML kopiert, das über dem Tag lag, das ich brauchte, und habe nicht erkannt, was ich getan hatte. Ups! Ich habe die Frage bearbeitet, um meine Dummheit zu beheben!
Morrislgn
4

Ich hatte kein Glück, über Eclipse zu aktualisieren. Musste mvn clean install -U verwenden (was alles löste).

Zahnloser Seher
quelle
10
Gal Bracha antwortete ebenfalls. Es ist besser, eine funktionierende Antwort abzustimmen und bei Bedarf Kommentare hinzuzufügen.
Brian White
4

Für mich scheint es tatsächlich ein Problem mit der Abhängigkeit POM gewesen zu sein.

Ich habe es umgangen, indem ich das virtuelle Jitpack-Repository verwendet habe, mit dem Sie Github-Repositorys basierend auf ihrer URL anstelle ihres eigenen POM einschließen können (was in meinem Fall fehlerhaft zu sein scheint).

    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
Phil Rykoff
quelle
3

Ich hatte das gleiche Problem für eine Weile und trotzdem mvn -U clean install das Problem nicht gelöst!

Ich habe das Problem endlich gelöst, indem ich das Ganze gelöscht habe .m2 Ordner und dann meine IDE neu gestartet habe und das Problem war verschwunden!

Manchmal trat das Problem aufgrund von Inkompatibilitäten oder Problemen in Ihrem lokalen Maven-Repository auf.

sakhoshdel
quelle
Ich habe versucht, eine Maven-Resynchronisierung durchzuführen, während ich offline war, und IntelliJ vollständig abgespritzt. Befolgen Sie Ihren Rat, haben Sie .m2 gelöscht, und jetzt funktioniert es wie ein Zauber! Vielen Dank!
Victor Grazi
3

In unserem Fall trat der Fehler aufgrund der falschen Umbenennung der groupId auf, während einige der Projekte in der Maven-Konfiguration mit mehreren Modulen auf andere verweisen.

Wir hatten ein Aggregatorprojekt ( billing-parent) mit zwei Modulen ( billing-api, billing):

com.company.team:billing-parent
|-com.company.team:billing-api
|-com.company.team:billing

Projekt billinghängt ab von billing-api. Also in seiner hatte pom.xmles:

<dependency>
    <groupId>com.company.team</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Wir haben uns entschlossen, groupId von com.company.teamin umzubenennen com.company.team.billing. Wir haben den alten Wert in den übergeordneten pom.xmlund in <parent>Abschnitten beider Module ersetzt. Aber vergessen, die Abhängigkeit oben zu aktualisieren. Wir hatten also eine Konfiguration, in der das billingProjekt auf alte billing-apiArtefakte verweist . Irgendwann schlägt es den Aufbau des billingModuls nach einiger Zeit mit dem Fehler wie

[ERROR] Failed to execute goal on project billing: Could not resolve dependencies for project com.company.team.billing:billing:jar:3.5.1-SNAPSHOT: Failed to collect dependencies at com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failed to read artifact descriptor for com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failure to find <parent of the com.company.team:billing-parent project which is not available any more>

trotz der Tatsache dass billing-api Modul fehlerfrei erstellt wird.

Lösung 1: Umbenennen groupIdindependency als auch.

Lösung 2: Ersetzen Sie groupIddurch die ${project.groupId}Eigenschaft wie folgt:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Fazit. Mein Rat für den Fall, dass Sie auf den Fehler bei der Konfiguration mit mehreren Modulen gestoßen sind, lautet also: Überprüfen Sie die Abhängigkeiten von Nachbarmodulen gründlich groupIdund überprüfen Sie sie artifactId.

Lu55
quelle
2

Navigieren Sie über die Shell in Ihrem Projektordner und führen Sie den folgenden Befehl aus:

mvn -U clean install

Normalerweise sollte dies Ihr Problem bereits lösen.

Wenn Sie eine Nachricht wie diese sehen:

Abhängigkeiten für Projekt konnten nicht aufgelöst werden: war: 0.0.1-SNAPSHOT: Abhängigkeiten konnten nicht unter com.sun.jersey: jersey-server: jar: 1.9 erfasst werden

Führen Sie dann Folgendes aus:

export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

gefolgt von:

mvn -U clean install

erneut, um Ihre Abhängigkeiten endgültig zu aktualisieren.

Führen Sie anschließend einen sauberen Maven-Build durch:

maven clean install
Abhijeet Grünkohl
quelle
1

Ich hatte ein ähnliches Problem. In meinem Fall war die Version von testng in meinem Ordner .m2 / repositories beschädigt, aber als ich sie löschte und erneut ein Maven-Update durchführte, funktionierte alles einwandfrei.

Wilhelm
quelle
0

Ich hatte dieses Problem in Eclipse, mvn -U clean installfunktionierte nicht, aber durch Klicken mit der rechten Maustaste auf das Projekt und Auswahl von Maven-> Projekt aktualisieren wurde es behoben.

gary69
quelle
0

Ich habe gerade angefangen, STS Eclipse zum ersten Mal mit Maven zu verwenden. Das von mir eingerichtete Projekt hatte bereits eine eigene settings.xml. In diesem Fall möchten Sie Ihre Datei settings.xml in der Ausführungskonfiguration aktualisieren.

  1. Klicken Sie mit der rechten Maustaste auf die Datei pom.xml und klicken Sie auf "Ausführen als" -> "Konfigurationen ausführen ...".

  2. Dort steht "Benutzereinstellungen". Klicken Sie auf die Schaltfläche Datei und fügen Sie die Datei settings.xml hinzu.

  3. Ich denke, dies ist spezifisch für Ihr Projekt, aber meine "Ziele" sind auf "Neuinstallation" eingestellt und ich habe "Tests überspringen" aktiviert.

Jose Peralez
quelle
0

Dieser Fehler besagt im Grunde, dass Maven eine bestimmte Abhängigkeit aus dem lokalen Repository nicht lesen konnte. Es könnte passieren, dass eine JAR-Datei nicht richtig heruntergeladen wurde. Gehen Sie also zu Ihrem lokalen Maven-Repository und stellen Sie sicher, dass keine .lastUpdated- Erweiterungsdatei vorhanden ist.

Sandoval0992
quelle
0

Das hat mir geholfen:

Aus der IDE (in meinem Fall Red Hat CodeReady Studio).

Windows -> Ansicht anzeigen -> Terminal -> Lokales Terminal öffnen / hinzufügen

Führen Sie die Befehle wie folgt aus>

$ cd /pom-file-path/

$ mvn -U clean install

Nhlanhla Rihlapfu
quelle
-4

Ich habe dieses Problem gelöst, indem ich die maven settings.xml und das Repository geändert habe

wonbin2011
quelle
Das eskalierte schnell :)
Ad Infinitum