Errore durante la distribuzione di un artefatto in Nexus


102

Ricevo un errore durante la distribuzione di un artefatto nel mio repository in un server Nexus: "Impossibile distribuire artefatti: Impossibile trasferire artefatto" "Impossibile trasferire il file http: /// mio_artifatto. Il codice di ritorno è: 400"

Ho Nexus in esecuzione con un repository personalizzato my_repo con la prossima configurazione locale di 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>
  • l'utente ha i permessi per creare / leggere / scrivere 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>

e poi eseguo

mvn deploy

e ottieni l'errore. Qualche idea?


2
HTTP 400 significa "richiesta errata". Immagino che uno degli URL non sia corretto.
Mark O'Connor

per me il problema era che non era una versione istantanea.
maveroid

Risposte:


156

Un paio di cose a cui posso pensare:

  • le credenziali dell'utente sono sbagliate
  • l'URL del server è sbagliato
  • l'utente non ha accesso al repository di distribuzione
  • l'utente non ha accesso alla destinazione specifica del repository
  • l'artefatto è già distribuito con quella versione se è una versione (non la versione -SNAPSHOT)
  • il repository non è adatto per la distribuzione del rispettivo artefatto (es. repo di rilascio per versione snapshot, repository proxy o gruppo invece di un repository ospitato)

Controllali e se hai ancora problemi fornisci maggiori dettagli qui.


44
Ho cambiato la versione del mio artefatto in SNAPSHOT e poi ho distribuito e tutto è andato bene. Poi mi sono reso conto che stavo tentando di eseguire la distribuzione a un gruppo Nexus (non un repository Nexus), quindi la causa del mio problema era: "l'URL del mio repository nexus era sbagliato"
acimutal

5
IMPORTANTE: "l'artefatto è già distribuito con quella versione se è una versione (non la versione -SNAPSHOT)"
Bhushan

1
Mi ha salvato la giornata ... Ho rimosso la parola -SNAPSHOT dalla versione in pom.xml, ecco perché non è in grado di distribuirsi su nexus ... Ho aggiunto la parola SNAPSHOT di nuovo, e ha funzionato ..
venugopal

3
Nella mia esperienza, le credenziali errate danno come risultato 401, non 400. Aggiungere "-SNAPSHOT" al nome della versione ha risolto il problema.
Marcus Junius Brutus

1
puoi semplicemente modificare la politica di distribuzione del tuo repository per abilitare la ridistribuzione
Furqan

35

Solo per creare una risposta separata. La risposta si trova effettivamente in un commento per la risposta accettata.

Prova a cambiare la versione del tuo artefatto per finire -SNAPSHOT.


2
No, stai perdendo tutto il punto, leggi attentamente il commento che menziona "quindi la causa del mio problema era: 'l'URL del mio repository nexus era sbagliato'". E fatti un'idea di cosa si intende per 'Il codice di ritorno è: 400' (prima di copiare i commenti di qualcuno come risposta)
kuhajeyan

13
Volevo solo commentare qui da quando ho colpito questa pagina nella mia ricerca. Mi sono imbattuto nello stesso errore 400 e ciò che bhagyas ha detto qui è la chiave (anche se non me ne rendevo conto al momento), se la distribuzione su un repository di istantanee la versione DEVE finire in -SNAPSHOT. La mia versione era 1.13.0.SNAPSHOT e mi ci è voluta un'ora per capire che doveva essere 1.13.0-SNAPSHOT.
Craig

16

400 Bad Request verrà restituito se si tenta di:

  1. Distribuire un artefatto (o versione) di istantanea che termina con -SNAPSHOT in un repository di rilascio
  2. Distribuire un artefatto di rilascio (versione che non termina con -SNAPSHOT ) in un repository di istantanee
  3. Distribuire la stessa versione di un elemento di rilascio più di una volta in un repository di versione


7

Oggi ho avuto questo problema esatto e il problema era che la versione che stavo cercando di rilasciare: perform era già nel repository Nexus.

Nel mio caso ciò era probabilmente dovuto a una disconnessione dalla rete durante una precedente chiamata di rilascio: eseguire. Anche se ho perso la connessione, sembra che il rilascio sia riuscito.


7

Nel raro caso in cui sia necessario ridistribuire l'artefatto SAME STABLE su Nexus, fallirà per impostazione predefinita. Se poi elimini l'artefatto da Nexus (tramite l'interfaccia web) allo scopo di distribuirlo di nuovo, la distribuzione fallirà comunque, poiché la semplice rimozione, ad esempio, di jar o pom non cancella gli altri file ancora presenti nella directory. È necessario accedere alla casella ed eliminare la directory nella sua interezza.


2
Solo per aggiungere a questo, se non hai accesso interattivo al server (io non - è una scatola gestita), puoi eliminare l'artefatto offensivo con un HTTP DELETE. Uso PostMan per questo scopo
Nathan Russell

Non sono sicuro che sia perché sto utilizzando il plug-in blobstore S3, ma non vedo una struttura di directory che corrisponda alla struttura del repository. C'è qualche trucco per identificare quali directory eliminare? Tutti i miei file sono denominati con un hash. Le directory sono nel formatocontent/vol-{01-43}/chap-{01-47}
majikman

È inoltre possibile eliminare tutti i file per una versione accedendo alla directory della versione dal repository, invece di cercare l'artefatto da una ricerca di tipo GAV. Nella visualizzazione del repository, è possibile fare clic con il pulsante destro del mouse sulla directory per ottenere un'azione di eliminazione per tutti i file in quel GAV.
Christian Trimble

3

Oggi ho avuto lo stesso problema con l'aggiunta "Il codice di ritorno è: 400, ReasonPhrase: Bad Request". che si è rivelato essere il problema "l'artefatto è già distribuito con quella versione se si tratta di una versione" dalla risposta sopra inserisci qui la descrizione del link

Una soluzione non ancora menzionata è configurare Nexus per consentire la ridistribuzione in un repository di rilascio. Forse non è una best practice, poiché questo è impostato per un motivo, potresti comunque andare su "Impostazioni di accesso" nella scheda "Configurazione" dei tuoi repository Nexus e impostare "Criteri di distribuzione" su "Consenti ridistribuzione".


3
  • nell'applicazione pom genitore ==> Versione inserire il tag come segue: xxx-SNAPSHOT

esempio: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": è molto importante

2

Assicurati che non esista già (artefatto e versione) in nexus (come release). In tal caso, restituisci Bad Request.


2

Per l'errore 400, controlla la "Politica di distribuzione" del repository di solito la sua "Disabilita ridistribuzione". La maggior parte delle volte la versione della tua libreria è già lì, ecco perché hai ricevuto un messaggio "Impossibile PUT mettere ' https: //yoururl/some.jar ". Codice di stato ricevuto 400 dal server: Repository non consente l'aggiornamento delle risorse:" nome del repository "

Quindi, hai alcune opzioni per risolvere questo problema. 1- consentire la ridistribuzione 2- eliminare la versione dal repository che si sta tentando di caricare 3- modificare il numero di versione


Consentire la ridistribuzione per il repository delle versioni di solito non è considerata una buona pratica. Non farlo senza considerazione.
Itaypk

1
@Itaypk hai ragione è per questo che ho suggerito alcuni altri suggerimenti. Secondo me, cambiare versione è meglio.
Furqan

1

Se una delle risposte precedenti ha funzionato, puoi creare un nuovo artefatto direttamente dal lato amministratore di (Schermata NEXUS allegata di seguito).

  1. Login to nexusUI http: // YOUR_URL: 8081 / nexus (nome utente: password predefinita admin : admin123 )
  2. Click repositories sul lato sinistro, quindi fare clic sul repository, ad esempio: fare clic su rilascio.
  3. Scegli artifact Upload(ultima scheda).
  4. Scegli GAV definitioncomeGAV Param - Quindi inserisci il tuo ID gruppo, ID artefatto e versione.
  5. Scegli il file Jar.
  6. Fai clic su carica artefatto. Questo è tutto !

Ora sarai in grado di aggiungere la risposta nel tuo progetto. (Screenshot sotto)

inserisci qui la descrizione dell'immagine


1

Ciò può accadere anche se si dispone di una politica di denominazione relativa alla versione, che vieta la versione # che si sta tentando di distribuire. Nel mio caso stavo cercando di caricare una versione (per rilasciare repo)2.0.1 ma in seguito scoperto che la nostra configurazione di nexus non consente nient'altro che un numero intero per le versioni.

Ho provato più tardi con la versione 2 e l'ho distribuita con successo.

Il messaggio di errore sicuramente non aiuta:

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

Un messaggio migliore avrebbe potuto essere version 2.0.1 violates naming policy


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.