Błąd podczas rozmieszczania artefaktu w Nexusie

102

Podczas wdrażania artefaktu w moim własnym repozytorium na serwerze Nexus pojawia się błąd: „Nie udało się wdrożyć artefaktów: nie można przesłać artefaktu” „Nie udało się przesłać pliku http: /// moj_artefakt. Kod powrotu to: 400”

Mam Nexusa z jednym niestandardowym repozytorium my_repo z następną lokalną konfiguracją maven:

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>
  • użytkownik ma uprawnienia do tworzenia / odczytu / zapisu w 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>

a potem wykonuję

mvn deploy

i otrzymaj błąd. Dowolny pomysł?

acymutalny
źródło
2
HTTP 400 oznacza „złe żądanie”. Domyślam się, że jeden z adresów URL jest nieprawidłowy.
Mark O'Connor,
dla mnie problem polegał na tym, że nie była to wersja migawkowa.
Maveroid

Odpowiedzi:

156

Kilka rzeczy, które przychodzą mi do głowy:

  • poświadczenia użytkownika są nieprawidłowe
  • adres URL do serwera jest nieprawidłowy
  • użytkownik nie ma dostępu do repozytorium wdrażania
  • użytkownik nie ma dostępu do określonego celu repozytorium
  • artefakt jest już wdrożony w tej wersji, jeśli jest to wydanie (nie wersja -SNAPSHOT)
  • repozytorium nie nadaje się do wdrożenia odpowiedniego artefaktu (np. repozytorium wersji dla wersji migawkowej, repozytorium proxy lub grupa zamiast repozytorium hostowanego)

Sprawdź je, a jeśli nadal masz problemy, podaj więcej szczegółów tutaj.

Manfred Moser
źródło
44
Zmieniłem wersję mojego artefaktu na SNAPSHOT, a następnie wdrożyłem i wszystko było w porządku. Potem zdałem sobie sprawę, że próbuję wdrożyć w grupie Nexus (a nie repozytorium Nexusa), więc przyczyną mojego problemu było:
``
5
WAŻNE: „artefakt został już wdrożony w tej wersji, jeśli jest to wydanie (nie wersja -SNAPSHOT)”
Bhushan
1
Uratowałem mój dzień ... Usunąłem słowo -SNAPSHOT z wersji w pom.xml, dlatego nie można go wdrożyć na nexusie ... Dodałem z powrotem słowo SNAPSHOT i zadziałało ..
venugopal
3
Z mojego doświadczenia wynika, że ​​błędne dane uwierzytelniające dają wynik 401, a nie 400. Dodanie sufiksu do nazwy wersji przez „-SNAPSHOT” rozwiązało problem.
Marcus Junius Brutus
1
możesz po prostu zmienić zasady wdrażania repozytorium, aby umożliwić ponowne wdrożenie
Furqan
35

Po prostu utwórz osobną odpowiedź. Odpowiedź znajduje się w komentarzu do zaakceptowanej odpowiedzi.

Spróbuj zmienić wersję swojego artefaktu na zakończenie -SNAPSHOT.

bhagyas
źródło
2
Nie, nie rozumiesz o co chodzi, przeczytaj uważnie komentarz, o którym mowa, "więc przyczyną mojego problemu było: 'adres URL do mojego repozytorium Nexusa był nieprawidłowy'". I dowiedz się, co oznacza
``
13
Chciałem tylko skomentować, odkąd trafiłem na tę stronę w moich poszukiwaniach. Napotkałem ten sam błąd 400 i kluczem jest to, co powiedział bhagyas (chociaż nie zdawałem sobie z tego wtedy sprawy), jeśli wdrażając do repozytorium migawek, wersja MUSI kończyć się na -SNAPSHOT. Moja wersja to 1.13.0.SNAPSHOT i zajęło mi godzinę, zanim zrozumiałem, że musi to być 1.13.0-SNAPSHOT.
Craig
17

400 złych żądań zostanie zwróconych, jeśli spróbujesz:

  1. Wdróż artefakt (lub wersję) migawki kończący się na -SNAPSHOT w repozytorium wydania
  2. Wdróż artefakt wydania (wersja nie kończąca się na -SNAPSHOT ) w repozytorium migawek
  3. Wdrażaj tę samą wersję artefaktu wydania więcej niż raz w repozytorium wydania
roj
źródło
7

Miałem dzisiaj dokładnie ten problem, a problem polegał na tym, że wersja, którą próbowałem wydać: perform, była już w repozytorium Nexusa.

W moim przypadku było to prawdopodobnie spowodowane rozłączeniem sieci podczas wcześniejszego wywołania wydania: perform. Mimo że straciłem połączenie, wydaje się, że wydanie się powiodło.

eidolon1138
źródło
7

W rzadkich przypadkach, gdy musisz ponownie rozmieścić artefakt SAME STABILNY na Nexusie, domyślnie zakończy się niepowodzeniem. Jeśli następnie usuniesz artefakt z Nexusa (przez interfejs sieciowy) w celu jego ponownego wdrożenia, wdrożenie nadal się nie powiedzie, ponieważ samo usunięcie np. Jar lub pom nie wyczyści innych plików wciąż leżących w katalogu. Musisz zalogować się do skrzynki i całkowicie usunąć katalog.

bosvos
źródło
2
Wystarczy dodać do tego, że jeśli nie masz interaktywnego dostępu do serwera (ja nie - to zarządzane pudełko), możesz usunąć naruszający artefakt za pomocą HTTP DELETE. W tym celu używam PostMana
Nathan Russell
Nie jestem pewien, czy dzieje się tak, ponieważ używam wtyczki S3 blobstore, ale nie widzę struktury katalogów pasującej do struktury repozytorium. Czy jest jakiś sposób na zidentyfikowanie, które książki mają zostać usunięte? Wszystkie moje pliki są nazwane za pomocą skrótu. Katalogi mają formatcontent/vol-{01-43}/chap-{01-47}
majikman
Możesz także usunąć wszystkie pliki do wydania, przechodząc do katalogu wydania z repozytorium, zamiast szukać artefaktu na podstawie wyszukiwania typu GAV. W widoku repozytorium możesz kliknąć katalog prawym przyciskiem myszy, aby uzyskać operację usuwania dla wszystkich plików w tym GAV.
Christian Trimble
3

Dzisiaj miałem ten sam problem z dodaniem „Kod zwrotny to: 400, ReasonPhrase: Złe żądanie”. który okazał się być "artefakt jest już wdrożony z tą wersją jeśli jest to wydanie" problem z odpowiedzi powyżej wpisz opis linku tutaj

Jednym z rozwiązań, o których jeszcze nie wspomniano, jest skonfigurowanie Nexusa, aby umożliwić ponowne wdrożenie do repozytorium wydania. Może nie jest to najlepsza praktyka, ponieważ jest to ustawione z jakiegoś powodu, mimo to możesz przejść do „Ustawień dostępu” na karcie „Konfiguracja” repozytoriów Nexusa i ustawić „Zasady wdrażania” na „Zezwalaj na ponowne rozmieszczenie”.

jonashackt
źródło
3
  • w aplikacji nadrzędnej pom ==> Version umieść tag w następujący sposób: xxx-SNAPSHOT

przykład: 0.0.1-SNAPSHOT

  • „-SNAPSHOT”: jest bardzo ważne
Fadid
źródło
2

Upewnij się, że nie istnieje już (artefakt i wersja) w nexusie (jako wydanie). W takim przypadku zwróć Bad Request.

danipenaperez
źródło
2

W przypadku błędu 400 sprawdź repozytorium „Zasady wdrażania”, zazwyczaj „Wyłącz ponowne wdrażanie”. W większości przypadków Twoja wersja biblioteki już tam jest, dlatego otrzymałeś komunikat „Nie można umieścić ' https: //yoururl/some.jar '. Otrzymano kod statusu 400 z serwera: Repozytorium nie zezwala na aktualizację zasobów:„ Twój nazwa repozytorium "

Masz więc kilka opcji rozwiązania tego problemu. 1- zezwól na ponowne rozmieszczenie 2- usuń wersję z repozytorium, które próbujesz załadować, 3- zmień numer wersji

Furqan
źródło
Zezwalanie na ponowne wdrażanie w repozytorium wydań zwykle nie jest uważane za dobrą praktykę. Nie rób tego bez namysłu.
Itaypk
1
@ Itaypk, masz rację, dlatego zasugerowałem kilka innych sugestii. Moim zdaniem zmiana wersji jest lepsza.
Furqan
1

Jeśli którakolwiek z powyższych odpowiedzi się sprawdziła, możesz utworzyć nowy artefakt bezpośrednio ze strony administratora (zrzut ekranu NEXUSA załączony poniżej).

  1. Login to nexusUI http: // TWÓJ_URL: 8081 / nexus (nazwa użytkownika: domyślne hasło administratora : admin123 )
  2. Click repositories po lewej stronie, a następnie kliknij repozytorium, Na przykład: kliknij zwolnij.
  3. Wybierz artifact Upload(ostatnia karta).
  4. Wybierać GAV definition jako GAV Param- następnie wprowadź identyfikator grupy, identyfikator artefaktu i wersję.
  5. Wybierz plik Jar.
  6. Kliknij prześlij artefakt. Otóż ​​to !

Teraz będziesz mógł dodać odpowiednie poprawki do swojego projektu. (Zrzut ekranu poniżej)

wprowadź opis obrazu tutaj

vipin cp
źródło
1

Może się to również zdarzyć, jeśli masz zasady nazewnictwa dotyczące wersji, zabraniające wersji #, którą próbujesz wdrożyć. W moim przypadku próbowałem wgrać wersję (do wydania repozytorium)2.0.1 ale później okazało się, że nasza konfiguracja nexusa nie zezwala na wydanie niczego poza liczbą całkowitą.

Próbowałem później z wersją 2 i pomyślnie ją wdrożyłem.

Komunikat o błędzie zdecydowanie nie pomaga:

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

Mogłaby być lepsza wiadomość version 2.0.1 violates naming policy

stary mnich
źródło
0

Identyfikator serwera powinien być zgodny z identyfikatorem repozytorium pliku maven settings.xml

Ravi Petchimuthu
źródło