Fehler beim Bereitstellen eines Artefakts in Nexus


102

Beim Bereitstellen eines Artefakts in meinem eigenen Repository auf einem Nexus-Server wird eine Fehlermeldung angezeigt: "Fehler beim Bereitstellen von Artefakten: Artefakt konnte nicht übertragen werden" "Fehler beim Übertragen der Datei http: /// my_artifact. Rückgabecode ist: 400"

Ich habe Nexus mit einem benutzerdefinierten Repository my_repo mit der nächsten lokalen Maven-Konfiguration ausgeführt:

settings.xml

<server>
    <id>my_repo</id>
    <username>user</username>
    <password>pass</password>
 </server>
 ...
 <mirror>
    <id>my_repo</id>
    <name>Repo Mirror</name>
    <url><my_url_to_my_repo></url>
    <mirrorOf>*</mirrorOf>
  </mirror>
  • Benutzer hat Berechtigungen zum Erstellen / Lesen / Schreiben in my_repo -

pom.xml

<distributionManagement>
        <repository>
            <id>my_repo</id>
            <name>my_repo</name>
            <url><my_url_to_my_repo></url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url><my_url_to_my_snapshot_repo></url>
        </snapshotRepository>
    </distributionManagement>

und dann führe ich aus

mvn deploy

und den Fehler bekommen. Irgendeine Idee?


2
HTTP 400 bedeutet "schlechte Anfrage". Ich vermute, eine der URLs ist falsch.
Mark O'Connor

Für mich war das Problem, dass es keine Snapshot-Version war.
Maveroid

Antworten:


155

Ein paar Dinge, an die ich denken kann:

  • Benutzeranmeldeinformationen sind falsch
  • URL zum Server ist falsch
  • Der Benutzer hat keinen Zugriff auf das Bereitstellungsrepository
  • Der Benutzer hat keinen Zugriff auf das bestimmte Repository-Ziel
  • Artefakt wird bereits mit dieser Version bereitgestellt, wenn es sich um eine Version handelt (nicht -SNAPSHOT-Version).
  • Das Repository ist nicht für die Bereitstellung des jeweiligen Artefakts geeignet (z. B. Release-Repo für Snapshot-Version, Proxy-Repo oder Gruppe anstelle eines gehosteten Repositorys).

Überprüfen Sie diese und geben Sie hier weitere Details an, wenn Sie immer noch auf Probleme stoßen.


44
Ich habe die Version meines Artefakts in SNAPSHOT geändert und dann bereitgestellt und alles war in Ordnung. Dann wurde mir klar, dass ich versuchte, eine Bereitstellung für eine Nexus-Gruppe (nicht für ein Nexus-Repository)
durchzuführen.

5
WICHTIG: "Artefakt wird bereits mit dieser Version bereitgestellt, wenn es sich um eine Version handelt (nicht -SNAPSHOT-Version)"
Bhushan

1
Ich habe meinen Tag gerettet ... Ich habe das Wort -SNAPSHOT aus der Version in pom.xml entfernt, deshalb kann es nicht auf nexus bereitgestellt werden ... Ich habe das Wort SNAPSHOT wieder hinzugefügt und es hat funktioniert ..
venugopal

3
Nach meiner Erfahrung führen falsche Anmeldeinformationen zu 401, nicht zu 400. Das Hinzufügen des Versionsnamens mit "-SNAPSHOT" hat das Problem für mich behoben.
Marcus Junius Brutus

1
Sie können einfach die Bereitstellungsrichtlinie Ihres Repositorys ändern, um die
erneute

35

Nur um eine separate Antwort zu erstellen. Die Antwort befindet sich tatsächlich in einem Kommentar zur akzeptierten Antwort.

Versuchen Sie, die Version Ihres Artefakts zu ändern, um damit zu enden -SNAPSHOT.


2
Nein, Sie verpassen den ganzen Punkt. Lesen Sie den Kommentar sorgfältig durch, in dem es heißt: "Die Ursache meines Problems war also: 'URL zu meinem Nexus-Repository war falsch'". Und machen Sie sich ein Bild davon, was unter "Rückkehrcode ist: 400" zu verstehen ist (bevor Sie nur die Kommentare eines anderen als Antwort kopieren)
kuhajeyan

13
Ich wollte hier nur einen Kommentar abgeben, da ich diese Seite bei meiner Suche aufgerufen habe. Ich bin auf den gleichen 400-Fehler gestoßen, und was Bhagyas hier gesagt hat, ist der Schlüssel (obwohl ich ihn zu diesem Zeitpunkt nicht erkannt habe). Wenn ich ihn in einem Snapshot-Repository bereitstelle, MUSS die Version in -SNAPSHOT enden. Meine Version war 1.13.0.SNAPSHOT und ich brauchte eine Stunde, um herauszufinden, dass es 1.13.0-SNAPSHOT sein musste.
Craig

16

400 Bad Request wird zurückgegeben, wenn Sie versuchen:

  1. Stellen Sie ein Snapshot- Artefakt (oder eine Version) mit der Endung -SNAPSHOT in einem Release- Repository bereit
  2. Stellen Sie ein Release- Artefakt (Version endet nicht mit -SNAPSHOT ) in einem Snapshot- Repository bereit
  3. Stellen Sie die gleiche Version eines Release Artefakts mehrmals in einem Release- Repository bereit


7

Ich hatte heute genau dieses Problem und das Problem war, dass die Version, die ich veröffentlichen wollte: perform bereits im Nexus-Repo war.

In meinem Fall war dies wahrscheinlich auf eine Netzwerkunterbrechung während eines früheren Aufrufs von release: perform zurückzuführen. Obwohl ich meine Verbindung verloren habe, scheint die Veröffentlichung erfolgreich zu sein.


7

In dem seltenen Fall, dass Sie das Artefakt SAME STABLE erneut für Nexus bereitstellen müssen, schlägt dies standardmäßig fehl. Wenn Sie dann das Artefakt aus Nexus (über die Weboberfläche) löschen, um es erneut bereitzustellen, schlägt die Bereitstellung weiterhin fehl, da durch das Entfernen von z. B. jar oder pom keine anderen Dateien gelöscht werden, die noch im Verzeichnis liegen. Sie müssen sich bei der Box anmelden und das Verzeichnis vollständig löschen.


2
Wenn Sie keinen interaktiven Zugriff auf den Server haben (ich weiß nicht - es handelt sich um eine verwaltete Box), können Sie das fehlerhafte Artefakt mit einem HTTP-LÖSCHEN löschen. Ich benutze PostMan für diesen Zweck
Nathan Russell

Ich bin mir nicht sicher, ob es daran liegt, dass ich das S3-Blobstore-Plugin verwende, aber ich sehe keine Verzeichnisstruktur, die mit der Repo-Struktur übereinstimmt. Gibt es einen Trick, um herauszufinden, welche Verzeichnisse gelöscht werden sollen? Alle meine Dateien sind mit einem Hash benannt. Die Verzeichnisse haben das Formatcontent/vol-{01-43}/chap-{01-47}
Majikman

Sie können auch alle Dateien für eine Version löschen, indem Sie im Repository zum Veröffentlichungsverzeichnis navigieren, anstatt bei einer GAV-Typensuche nach dem Artefakt zu suchen. In der Repository-Ansicht können Sie mit der rechten Maustaste auf das Verzeichnis klicken, um eine Löschaktion für alle Dateien in dieser GAV abzurufen.
Christian Trimble

3

Ich hatte heute das gleiche Problem mit dem Zusatz "Rückkehrcode ist: 400, ReasonPhrase: Bad Request". Es stellte sich heraus, dass das Problem "Artefakt wird bereits mit dieser Version bereitgestellt, wenn es sich um eine Version handelt" aus der obigen Antwort die Linkbeschreibung hier eingeben

Eine noch nicht erwähnte Lösung besteht darin, Nexus so zu konfigurieren, dass eine erneute Bereitstellung in einem Release-Repository möglich ist. Möglicherweise keine bewährte Methode, da dies aus einem bestimmten Grund festgelegt ist. Sie können jedoch in der Registerkarte "Konfiguration" Ihres Nexus-Repositorys zu "Zugriffseinstellungen" gehen und die "Bereitstellungsrichtlinie" auf "Erneutes Bereitstellen zulassen" setzen.


3
  • Fügen Sie in der übergeordneten pom-Anwendung ==> Version das Tag wie folgt ein: xxx-SNAPSHOT

Beispiel: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": ist sehr wichtig

2

Stellen Sie sicher, dass nicht bereits (Artefakt und Version) im Nexus (als Release) vorhanden ist. In diesem Fall geben Sie Bad Request zurück.


2

Überprüfen Sie bei 400-Fehlern das Repository "Bereitstellungsrichtlinie", normalerweise "Neubereitstellung deaktivieren". Meistens ist Ihre Bibliotheksversion bereits vorhanden, weshalb Sie die Meldung "PUT put konnte nicht eingegeben werden" erhalten haben. Fällen https: //yoururl/some.jar eingegeben werden . Der Statuscode 400 wurde vom Server empfangen: Das Repository erlaubt keine Aktualisierung von Assets:" erhalten Repository-Name "

Sie haben also einige Möglichkeiten, dies zu beheben. 1- Erneutes Bereitstellen zulassen 2- Löschen der Version aus Ihrem Repository, das Sie hochladen möchten 3- Ändern der Versionsnummer


Das Zulassen einer erneuten Bereitstellung für das Release-Repository wird normalerweise nicht als bewährte Methode angesehen. Tun Sie das nicht ohne Rücksicht.
Itaypk

1
@Itaypk Sie haben Recht, deshalb habe ich ein paar andere Vorschläge vorgeschlagen. Meiner Meinung nach ist es besser, die Version zu ändern.
Furqan

1

Wenn eine der oben genannten Antworten geklappt hat, können Sie ein neues Artefakt direkt von der Administratorseite von erstellen (NEXUS-Screenshot unten beigefügt).

  1. Login to nexusBenutzeroberfläche http: // YOUR_URL: 8081 / nexus (Benutzername: admin Standardkennwort: admin123 )
  2. Click repositories Klicken Sie dann auf der linken Seite auf das Repo. Zum Beispiel: Klicken Sie auf Freigeben.
  3. Wählen Sie artifact Upload(letzte Registerkarte).
  4. Wählen Sie GAV definitionals GAV Param- Geben Sie dann Ihre Gruppen-ID, Artefakt-ID und Version ein.
  5. Wählen Sie Jar-Datei.
  6. Klicken Sie auf Artefakt hochladen. Das ist es !

Jetzt können Sie das entsprechende Element in Ihr Projekt einfügen (Screenshot unten).

Geben Sie hier die Bildbeschreibung ein


1

Dies kann auch passieren, wenn Sie eine Namensrichtlinie für die Version haben, die die Versionsnummer verbietet, die Sie bereitstellen möchten. In meinem Fall habe ich versucht, eine Version hochzuladen (um Repo freizugeben), 2.0.1aber später herausgefunden, dass unsere Nexus-Konfiguration nichts anderes als eine ganze Zahl für Releases zulässt.

Ich habe es später mit der Version versucht 2und sie erfolgreich bereitgestellt.

Die Fehlermeldung hilft definitiv nicht:

Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]

Eine bessere Nachricht hätte sein können version 2.0.1 violates naming policy


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.