Erreur lors du déploiement d'un artefact dans Nexus

102

J'obtiens une erreur lors du déploiement d'un artefact dans mon propre référentiel sur un serveur Nexus: "Échec du déploiement des artefacts: impossible de transférer l'artefact" "Échec du transfert du fichier http: /// mon_artifact. Le code de retour est: 400"

J'ai Nexus en cours d'exécution avec un référentiel personnalisé my_repo avec la prochaine configuration locale 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'utilisateur a les autorisations pour créer / lire / écrire dans 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>

puis j'exécute

mvn deploy

et obtenez l'erreur. Une idée?

acimutal
la source
2
HTTP 400 signifie "mauvaise requête". Je suppose que l'une des URL est incorrecte.
Mark O'Connor
pour moi, le problème était que ce n'était pas une version instantanée.
maveroid

Réponses:

156

Quelques choses auxquelles je peux penser:

  • les informations d'identification de l'utilisateur sont incorrectes
  • l'URL du serveur est incorrecte
  • l'utilisateur n'a pas accès au référentiel de déploiement
  • l'utilisateur n'a pas accès à la cible de référentiel spécifique
  • l'artefact est déjà déployé avec cette version s'il s'agit d'une version (pas de la version -SNAPSHOT)
  • le référentiel n'est pas adapté au déploiement de l'artefact respectif (par exemple, le référentiel de publication pour la version de l'instantané, le référentiel proxy ou le groupe au lieu d'un référentiel hébergé)

Vérifiez-les et si vous rencontrez toujours des problèmes, fournissez plus de détails ici.

Manfred Moser
la source
44
J'ai changé la version de mon artefact en SNAPSHOT puis déployer et tout allait bien. Ensuite, j'ai réalisé que j'essayais de déployer sur un groupe Nexus (pas un référentiel Nexus), donc la cause de mon problème était: `` l'URL de mon référentiel nexus était incorrecte ''
acimutal
5
IMPORTANT: "l'artefact est déjà déployé avec cette version s'il s'agit d'une version (pas de la version -SNAPSHOT)"
Bhushan
1
J'ai sauvé ma journée ... J'ai supprimé le mot -SNAPSHOT de la version dans pom.xml, c'est pourquoi il n'est pas en mesure de se déployer sur nexus ... J'ai ajouté le mot SNAPSHOT, et cela a fonctionné ..
venugopal
3
D'après mon expérience, des informations d'identification erronées donnent 401, pas 400. Le suffixe du nom de la version par "-SNAPSHOT" a résolu le problème pour moi.
Marcus Junius Brutus
1
vous pouvez simplement modifier la politique de déploiement de votre référentiel pour permettre le redéploiement
Furqan
35

Juste pour créer une réponse séparée. La réponse se trouve en fait dans un commentaire pour la réponse acceptée.

Essayez de changer la version de votre artefact pour terminer -SNAPSHOT.

bhagyas
la source
2
Non, vous manquez tout le point, lisez attentivement le commentaire qu'il mentionne "donc la cause de mon problème était: 'l'URL de mon dépôt nexus était fausse'". Et obtenez une idée de ce que signifie `` Le code de retour est: 400 '' (avant de simplement copier les commentaires de
quelqu'un
13
Je voulais juste faire un commentaire ici puisque j'ai frappé cette page dans ma recherche. J'ai rencontré la même erreur 400 et ce que les bhagyas ont dit ici est la clé (bien que je ne m'en sois pas rendu compte à l'époque), si le déploiement dans un référentiel d'instantanés, la version DOIT se terminer par -SNAPSHOT. Ma version était 1.13.0.SNAPSHOT et il m'a fallu une heure pour comprendre qu'elle devait être 1.13.0-SNAPSHOT.
Craig
16

400 Bad Request sera retourné si vous essayez de:

  1. Déployer un artefact de snapshot (ou une version) se terminant par -SNAPSHOT dans un référentiel de versions
  2. Déployer une version artefact (version non se terminant en -snapshot ) à un instantané référentiel
  3. Déployer la même version d'un artefact de version plusieurs fois dans un référentiel de version
roj
la source
7

J'ai eu ce problème exact aujourd'hui et le problème était que la version que j'essayais de publier: perform était déjà dans le dépôt Nexus.

Dans mon cas, cela était probablement dû à une déconnexion du réseau lors d'un appel antérieur de release: perform. Même si j'ai perdu ma connexion, il semble que la publication a réussi.

eidolon1138
la source
7

Dans le cas rare où vous auriez besoin de redéployer l'artefact MÊME STABLE sur Nexus, il échouera par défaut. Si vous supprimez ensuite l'artefact de Nexus (via l'interface Web) dans le but de le déployer à nouveau, le déploiement échouera toujours, car le simple fait de supprimer le fichier par exemple jar ou pom ne supprime pas les autres fichiers qui traînent toujours dans le répertoire. Vous devez vous connecter à la boîte et supprimer le répertoire dans son intégralité.

Bosvos
la source
2
Juste pour ajouter à cela, si vous n'avez pas d'accès interactif au serveur (je n'en ai pas - c'est une boîte gérée), vous pouvez supprimer l'artefact incriminé avec un HTTP DELETE. J'utilise PostMan à cette fin
Nathan Russell
Je ne sais pas si c'est parce que j'utilise le plugin blobstore S3, mais je ne vois pas de structure de répertoire qui correspond à la structure de dépôt. Existe-t-il une astuce pour identifier les répertoires à supprimer? Tous mes fichiers sont nommés avec un hachage. Les répertoires sont au formatcontent/vol-{01-43}/chap-{01-47}
majikman
Vous pouvez également supprimer tous les fichiers d'une version en accédant au répertoire de version à partir du référentiel, au lieu de rechercher l'artefact à partir d'une recherche de type GAV. Dans la vue du référentiel, vous pouvez cliquer avec le bouton droit sur le répertoire pour obtenir une action de suppression pour tous les fichiers de ce GAV.
Christian Trimble
3

J'ai eu le même problème aujourd'hui avec l'ajout "Le code de retour est: 400, ReasonPhrase: Bad Request." qui s'est avéré être le problème "l'artefact est déjà déployé avec cette version s'il s'agit d'une version" de la réponse ci-dessus, entrez la description du lien ici

Une solution non encore mentionnée consiste à configurer Nexus pour permettre le redéploiement dans un référentiel Release. Ce n'est peut-être pas une bonne pratique, car cela est défini pour une raison, vous pouvez néanmoins aller dans "Paramètres d'accès" dans l'onglet "Configuration" de vos référentiels Nexus et définir la "Politique de déploiement" sur "Autoriser le redéploiement".

Jonashackt
la source
3
  • dans l'application pom parent ==> Version, mettez la balise comme suit: xxx-SNAPSHOT

exemple: 0.0.1-SNAPSHOT

  • "-SNAPSHOT": est très important
Fadid
la source
2

Assurez-vous qu'il n'existe pas déjà (artefact et version) dans nexus (en tant que version). Dans ce cas, retournez Bad Request.

danipenaperez
la source
2

Pour l'erreur 400, vérifiez le référentiel "Politique de déploiement" généralement son "Désactiver le redéploiement". La plupart du temps, la version de votre bibliothèque est déjà là, c'est pourquoi vous avez reçu un message "Impossible de mettre ' https: //yoururl/some.jar '. Reçu le code d'état 400 du serveur: le référentiel n'autorise pas la mise à jour des ressources:" votre nom du référentiel "

Vous avez donc quelques options pour résoudre ce problème. 1- autoriser le redéploiement 2- supprimer la version de votre référentiel que vous essayez de télécharger 3- changer le numéro de version

Furqan
la source
Autoriser le redéploiement du référentiel de versions n'est généralement pas considéré comme une bonne pratique. Ne faites pas cela sans considération.
Itaypk
1
@Itaypk vous avez raison, c'est pourquoi j'ai suggéré quelques autres suggestions. À mon avis, changer de version est mieux.
Furqan
1

Si l'une des réponses ci-dessus fonctionne, vous pouvez créer un nouvel artefact directement à partir du côté administrateur de (Capture d'écran NEXUS ci-dessous).

  1. Login to nexusUI http: // VOTRE_URL: 8081 / nexus (nom d'utilisateur: mot de passe par défaut de l' administrateur : admin123 )
  2. Click repositories sur le côté gauche puis cliquez sur le repo, Par exemple: cliquez sur relâcher.
  3. Choisir artifact Upload (dernier onglet).
  4. Choisissez GAV definitioncommeGAV Param - Entrez ensuite votre groupid, votre identifiant d'artefact et votre version.
  5. Choisissez le fichier Jar.
  6. Cliquez sur télécharger l'artefact. C'est tout !

Vous pourrez maintenant ajouter le corrsponding dans votre projet (capture d'écran ci-dessous)

entrez la description de l'image ici

vipin cp
la source
1

Cela peut également se produire si vous avez une politique de dénomination autour de la version, interdisant la version # que vous essayez de déployer. Dans mon cas, j'essayais de télécharger une version (pour publier le dépôt), 2.0.1mais j'ai découvert plus tard que notre configuration nexus n'autorisait rien d'autre que le nombre entier pour les versions.

J'ai essayé plus tard avec la version 2et l' ai déployée avec succès.

Le message d'erreur n'aide certainement pas:

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

Un meilleur message aurait pu être version 2.0.1 violates naming policy

vieux-moine
la source
0

L'ID du serveur doit correspondre à l'ID du référentiel de maven settings.xml

Ravi Petchimuthu
la source