Les dépendances Maven échouent avec une erreur 501

154

Récemment, les travaux de build Maven exécutés dans Jenkins échouent, à l'exception ci-dessous, disant qu'ils ne pouvaient pas extraire les dépendances de Maven Central et devraient utiliser HTTPS . Je ne sais pas comment changer les demandes de HTTP en HTTPS . Quelqu'un pourrait-il me guider à ce sujet?

[ERREUR] Extension de construction insoluble: le
plug- in org.apache.maven.wagon:wagon-ssh:2.1ou l'une de ses dépendances n'a pas pu être résolu:
Impossible de collecter les dépendances pour org.apache.maven.wagon:wagon-ssh:jar:2.1 ():
Impossible de lire le descripteur d'artefact pour org.apache.maven.wagon:wagon-ssh:jar:2.1:
Impossible de transférer l'artefact org.apache.maven.wagon:wagon-ssh:pom:2.1de / vers le central ( http: //repo.maven.apache. org / maven2 ):
Impossible de transférer le fichier: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
Le code retour est:501, ReasonPhrase:HTTPS Required. -> [Help 2]

L'attente de Jenkins pour terminer la collecte du data[ERROR]
plug org.apache.maven.plugins:maven-clean-plugin:2.4.1- in ou de l'une de ses dépendances n'a pas pu être résolue:
impossible de lire le descripteur d'artefact pour org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
impossible de transférer l'artefact org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1de / vers le central ( http://repo.maven.apache.org/maven2 ):
échec de fichier de transfert: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
Le code retour est:501 , ReasonPhrase:HTTPS Required. -> [Help 1]

Arunan Sugunakumar
la source
5
Vous utilisez l' url repo.maven.apache.org/maven2 pour vous connecter à la centrale maven , utilisez plutôt repo.maven.apache.org/maven2, c'est-à-dire utilisez la connexion https
Manjunath HM
2
vérifiez votre settings.xmlen jenkins pour l'url centrale
maven
Salut Manjunath, j'ai le même problème. Savez-vous comment forcer maven à utiliser HTTPS au lieu de HTTP
Lahiru Madushanka
@Lahiru Madushanka parcourez les liens, vous obtenez donc une réponse à votre question stackoverflow.com/questions/25393298/…
Manjunath HM
1
J'ai changé la version maven en 3.6.3 et elle montre toujours la même erreur
dhS

Réponses:

130

La raison de l'erreur observée est expliquée dans Central 501 HTTPS Required

À compter du 15 janvier 2020, le référentiel central ne prend plus en charge les communications non sécurisées via HTTP standard et requiert que toutes les demandes adressées au référentiel soient chiffrées via HTTPS.

Il semble que les dernières versions de Maven (essayées avec 3.6.0, 3.6.1) utilisent déjà l'URL HTTPS par défaut.

Voici les dates de basculement des principaux référentiels:

Vos builds Java pourraient s'arrêter à partir du 13 janvier (si vous n'avez pas encore changé l'accès repo en HTTPS)

Mise à jour: il semble que depuis maven 3.2.3 maven central est accessible via HTTPS Voir https://stackoverflow.com/a/25411658/5820670

Journal des modifications Maven ( http://maven.apache.org/docs/3.2.3/release-notes.html )

farasath
la source
26
Salut! Je suis le chercheur d'origine qui a lancé cette initiative à l'échelle de l'industrie. Vous pouvez également trouver mon article de blog sur les dates importantes ici: medium.com/@jonathan.leitschuh/…
Jonathan Leitschuh
1
@JonathanLeitschuh veuillez écrire une réponse complète qui peut être votée et acceptée ...
Thorbjørn Ravn Andersen
1
J'utilise maven 3.6.0 sur Ubuntu 18.04 mais il ne semble pas utiliser l'URL https.
Ashutosh
@Ashutosh: même chose avec Maven 3.6.1 sur Ubuntu 19.10. Je ne sais pas pourquoi c'est le cas, cela pourrait être un patch Ubuntu, mais pourquoi feraient-ils cela?). Pour résoudre ce problème, utilisez l'une des réponses ci-dessous qui mettent à jour le settings.xmlfichier (et votez-les, s'il vous plaît, car c'est la bonne solution, à l'exception de l'utilisation d'un Maven patché).
Guss
Donc, j'ai explicitement configuré settings.xmlpour utiliser les référentiels HTTPS .. avec lesquels il peut, wgetmais pour une raison très étrange, mvn archetype:generate -X(pour simplement tester si les dépendances peuvent être téléchargées), il imprime toujours qu'il accède à Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom n'importe quelle aide, s'il vous plaît ..?
Giorgi Tsiklauri
62

Je fais face au même problème. Il y a deux solutions que j'ai essayées, et les deux fonctionnent bien pour moi.

  • Mettre à jour le référentiel de versions Maven (version Maven> = 3.2.3)
  • Limitez la version actuelle de Maven à l'utilisation des liens HTTPS.

Mettez à jour le référentiel de versions de Maven:

Téléchargez le binaire Apache Maven qui inclut les adresses https par défaut ( binaire Apache Maven 3.6.3 ). Et ouvrez la fenêtre de dialogue Options dans les outils de la barre de menus de NetBeans ( Java Maven Dialog View ). Et sélectionnez l'option de navigation dans Maven Home List Box ( Maven Home List Box View ). Après avoir ajouté la version nouvellement téléchargée d'Apache Maven (vue de zone de liste d'accueil Maven mise à jour ), le projet se construit et s'exécute avec succès.

Limitez la version actuelle de Maven à l'utilisation des liens HTTPS:

Incluez le code suivant dans pom.xml de votre projet.

<project>
      ...
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <repositories>
        <repository>
            <id>central</id>
            <name>Central Repository</name>
            <url>https://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>
Muhammad umer
la source
J'avais le référentiel central mais pas le référentiel central des plugins. Cela m'a arrangé.
ponder275
1
Restreindre la version actuelle de Maven à utiliser des liens HTTPS: a fonctionné pour moi.
Mohammad Anas
Dans mon cas, j'ai raté la partie <pluginRepository> et je recevais des erreurs lors de l'utilisation des archétypes car il était par défaut à http pour les plugins.
user1708042
Cela m'a également corrigé, mais j'ai reçu une autre erreur "Alerte fatale reçue: version_protocole" et j'ai dû passer à java 8 pour le corriger, au cas où quelqu'un tomberait sur le même problème.
Kim Tang
Je suis heureux d'avoir contribué au vote positif en brisant l'égalité. Cette réponse répondait au problème similaire que je rencontrais.
Brian Risk
36

À compter du 15 janvier 2020, le référentiel central ne prend plus en charge les communications non sécurisées sur HTTP standard et requiert que toutes les demandes adressées au référentiel soient chiffrées via HTTPS .

Si vous recevez cette erreur, vous devez remplacer toutes les références URL à Maven Central par leurs homologues canoniques HTTPS.

( source )

Nous avons apporté les modifications suivantes dans build.gradle de mon projet:

Vieux:

repositories {
   maven { url "http://repo.maven.apache.org/maven2" }
}

Nouveau:

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Ashwani
la source
Oui, je dois remplacer le fichier setting.xml mais malheureusement, cela ne fonctionne toujours pas. Suis-je en train de bien faire ou est-il nécessaire de changer un autre fichier?
Sumeet Vishwas
@SumeetVishwas Pouvez-vous partager un exemple de fichier settings.xml?
Arunan Sugunakumar
3
@ArunanSugunakumar je n'ai pas changé dans settings.xml. Tout ce que vous devez changer dans POM. mettre à jour le référentiel central de maven. J'ai mis l'échantillon de référentiel central dans le fil de réponse. veuillez trouver ci
Sumeet Vishwas
1
La question de l'OP dit: "Je ne sais pas comment changer les requêtes de HTTP en HTTPS." Cette réponse ne répond pas à la question.
wchargin
28

Essayez d'appuyer sur l'URL ci-dessous dans n'importe quel navigateur. Il retournera 501

http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

Veuillez essayer avec https. Il téléchargera un fichier pom.xml:

https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom

Veuillez l'ajouter ( https://repo.maven.apache.org/maven2 ) dans le fichier setting.xml:

<repositories>
   <repository>
      <id>Central Maven repository</id>
      <name>Central Maven repository https</name>
      <url>https://repo.maven.apache.org/maven2</url>
   </repository>
</repositories>
Sarjit
la source
1
Pouvez-vous s'il vous plaît fournir un exemple d'un fichier setting.xml complet car j'ai essayé sans succès d'ajouter ce qui précède dans le fichier?
jhertz
Trouvé cette réponse qui a rendu l'emplacement dans le fichier plus clair, maintenant cela fonctionne: stackoverflow.com/a/59784045/3120576
jhertz
22

Mettez à jour le référentiel central de Maven et utilisez https au lieu de http .

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
Sumeet Vishwas
la source
J'ai essayé cela dans Pom et cela a bien fonctionné: <repositories> <repository> <id> central repo https </id> <name> Central Repository Https </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repositories>.
lam
1
Merci. Cela fonctionne dans ubuntu 18.10, en utilisant Netbeans. J'ai dû mettre Maven à la maison à la dernière version de Maven dans Netbeans. Où avez-vous trouvé cette solution?
Sanal S
Vous devrez peut-être également mettre à jour le référentiel de plug-ins. Au moins, cela devait être fait pour moi aussi, afin d'être réparé.
Kim Tang
16

J'utilisais une nouvelle installation de Maven / Java sur un conteneur Docker.

Pour moi, je devais cd $M2_HOME/confet éditer le settings.xmlfichier là-bas. Ajoutez le bloc suivant à l'intérieur<mirrors>...</mirrors>

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>
mehulmpt
la source
Pourriez-vous s'il vous plaît partager votre Dockerfile? J'ai le même problème mais je ne sais pas comment résoudre ce problème!
Han Van Pham
@HanVanPham J'ai mis à jour mon maven vers la dernière version, ce problème http a été résolu.
mehulmpt
Pour moi aussi, l'adaptation du bloc central sécurisé dans le fichier local settings.xml ($ HOME / .m2 / settings.xml) a parfaitement fonctionné.
t3az0r
13

J'utilisais une version obsolète de Maven (3.0.3 et 3.1). Ces anciennes versions ne prennent plus en charge les référentiels http (comme mentionné ci-dessus). La mise à niveau vers Maven 3.6 était la solution pour moi.

JC Lombard
la source
1
Depuis maven 3.2.3, Central accède via HTTPS par défaut maven.apache.org/docs/3.2.3/release-notes.html
farasath
12

Maven passe au HTTPS et désactive l'accès HTTP

Pour résumer, à partir du 15 janvier 2020, le référentiel Maven Central ne prend plus en charge les connexions HTTP (les autres référentiels font de même). Par conséquent, vous indiquerez vos paramètres Maven / Gradle pour utiliser une URL HTTPS.

Solution:

Vous pouvez choisir l'une des trois approches suivantes.

  1. Ajoutez un référentiel dans le pom.xmlfichier de votre projet

    <project>
    ...
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
        </repository>
      </repositories>
    </project>
  2. Ajoutez le référentiel dans un profil du settings.xmlfichier.

    <profile>
      <id>my profile</id>
      <repositories>
        <repository>
          <id>central maven repo</id>
          <name>central maven repo https</name>
          <url>https://repo.maven.apache.org/maven2</url>
          </repository>
      </repositories>
    </profile>
  3. Mettez à jour votre version maven vers une nouvelle qui utilise les valeurs https par défaut. Le dernier en ce moment 3.6.3 Télécharger ici

Pour Gradle:

Remplacez uniquement l'URL de la version HTTPS.

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Adam M. Gamboa G.
la source
Pour mettre à niveau (3.3.9 vers 3.6.3), devez-vous d'abord désinstaller complètement l'ancienne version? Ou installez-vous simplement la dernière version?
BigRedEO
1
@BigRedEO Vous pouvez avoir plusieurs versions de maven dans votre environnement. Cependant, votre $M2_HOMEou vos $PATH variables env pointeront uniquement vers l'une d'entre elles, qui sera votre version maven par défaut. Je préférerais désinstaller l'ancien avant d'installer un plus récent. Mais cela dépend de vos besoins.
Adam M. Gamboa G.
10

J'ai été ajouté à la suite du segment de code à setting.xml et le problème a été résolu,

<mirrors>
    <mirror>
        <id>maven-mirror</id>
        <name>Maven Mirror</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
Samith
la source
9

J'ai le même problème, mais j'utilise GitLab au lieu de Jenkins. Les étapes que j'ai dû faire pour surmonter le problème:

  1. Mon projet est dans GitLab, il utilise donc le fichier .yml qui pointe vers une image Docker, je dois faire une intégration continue, et l'image qu'il utilise a les URL http: // maven . J'ai donc changé cela en https: // maven .
  2. Cette même image Dockerfile avait une ancienne version de Maven 3.0.1 qui m'a posé des problèmes du jour au lendemain. J'ai mis à jour le Dockerfile pour obtenir la dernière version 3.6.3
  3. J'ai ensuite déployé cette image dans mon référentiel en ligne et mis à jour le fichier yml de mon projet Maven pour utiliser cette nouvelle image.
  4. Et enfin, j'ai mis à jour mon fichier POM de projets principaux pour référencer https: // maven ... au lieu de http: // maven

Je me rends compte que c'est plus spécifique à ma configuration. Mais sans faire toutes les étapes ci-dessus, je continuerais à recevoir ce message d'erreur Return code is: 501 , ReasonPhrase:HTTPS Required

CAM_344
la source
Pourriez-vous s'il vous plaît partager votre Dockerfile?
Han Van Pham
8

Comme indiqué dans d'autres réponses, https est désormais requis pour faire des demandes à Maven Central, tandis que les anciennes versions de Maven utilisent http .

Si vous ne souhaitez pas / ne pouvez pas mettre à niveau vers Maven 3.2.3+, vous pouvez contourner ce problème en ajoutant le code suivant dans votre MAVEN_HOME \ conf \ settings.xml dans la <profiles>section:

<profile>
    <id>maven-https</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <url>https://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories> 
</profile>

Ce sera toujours un paramètre actif, sauf si vous le désactivez / remplacez-le dans votre POM si nécessaire.

Ellrohir
la source
7

Pour tous les codeurs d'entreprise, idéalement, si vous obtenez cette erreur, cela signifie que votre base de code est toujours en cours de construction à partir d'une communauté open-source. Vous devez passer outre le référentiel «central» avec votre gestionnaire de référentiel Maven interne.

Vous pouvez accéder à votre fichier settings.xml et remplacer l'URL de votre référentiel central de http: // à https: //

<M2_HOME>/conf/settings.xml

Recherchez les sections miroirs et ajoutez l'entrée suivante:

    <mirror>
     <id>other-mirror</id>
     <name>Other Mirror Repository</name>
     <url>https://other-mirror.repo.other-company.com/maven2</url>
     <mirrorOf>central</mirrorOf>
    </mirror>

Dans la section URL, si vous utilisiez http://repo1.maven.org/maven2/ ou http://repo.maven.apache.org/maven2/ alors

Remplacez http://repo1.maven.org/maven2/ par https://repo1.maven.org/maven2/

Remplacez http://repo.maven.apache.org/maven2/ par https://repo.maven.apache.org/maven2/

Vous devez idéalement utiliser l'URL de gestion / référentiel du contrôle des sources de votre entreprise ici. Comme cela bloquera tout contact avec la communauté de référentiels Maven open source.

Comme mentionné dans d'autres réponses, à compter du 15 janvier 2020, le référentiel central Maven ne prend pas en charge les communications non sécurisées via HTTP standard.

Bhavik Shah
la source
Après avoir ajouté le miroir dans la section des miroirs, j'ai une erreur, ce pair n'est pas authentifié. Qu'est-ce que je devrais faire maintenant? Merci!
dimson
@dimson Cela signifie que vous avez essayé de vous connecter avec https mais que vous manquiez de certificat d'authentification, probablement parce que Java ne l'a pas. Importez le certificat du référentiel dans le magasin de clés Java ou mettez à niveau Java.
tibortru
@tibortru Thanx Man, déjà résoudre le problème. J'ai ajouté ces propriétés à maven dans l'IDE: maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https. protocoles = TLSv1, TLSv1.1, TLSv1.2. Après cela, tout fonctionne bien.
dimson
Eh bien, c'est l'inverse. Non sécurisé :)
tibortru
7

Pour moi (codeur d'entreprise), j'ai également ajouté un référentiel miroir dans settings.xmlle problème résolu. J'utilise également Maven dans un conteneur docker.

<mirrors>
    <mirror>
        <id>https-mirror</id>
        <name>Https Mirror Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
Oscar Drai
la source
Pourriez-vous me montrer où trouver le fichier settings.xml, @Oscar?
Han Van Pham
Sûr! Dans notre Dockerfile, nous l'avons d'abord placé dans un dossier temporaire comme celui-ci: echo "<settings> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Ensuite, nous exécutons maven avec l'option "-s" et passons le chemin d'accès au fichier de paramètres comme celui-ci "mvn -s /tmp/maven-settings.xml clean". J'espère que cela aide!
Oscar Drai
@ han-van-pham vous le trouvez dans $ HOME / .m2 /. Sinon, créez-le là-bas.
dr0i
4

En utilisant Ubuntu 16.04, java 1.8.0_201.

J'ai désinstallé l'ancien maven et installé Maven 3.6.3, j'ai toujours cette erreur que les dépendances Maven échouent avec une erreur 501.

Réalisé, il pourrait s'agir d'un problème de magasin de clés / clés associé à la nécessité de https. Trouvé que vous pouvez maintenant configurer les options -Djavax en utilisant un fichier jvm.config, voir: https://maven.apache.org/configure.html .

Comme j'utilise également Tomcat, j'ai copié la configuration du magasin de clés et du magasin de confiance de Tomcat (setenv.sh) dans mon jvm.config, puis cela a fonctionné!

Il y a aussi une option pour passer cette config dans 'export MAVEN_OPTS' (lors de l'utilisation de mvn generate) mais bien que cela ait arrêté l'erreur 501, il en a créé une autre: il attendait un fichier pom.

La création d'un fichier jvm.config distinct fonctionne parfaitement, il suffit de le placer à la racine de votre projet.

J'espère que cela aide quelqu'un, m'a pris toute la journée pour le comprendre!

user2677034
la source
4

Le même problème se produit également pour jcenter .

À partir du 13 janvier 2020, Jcenter est uniquement disponible sur HTTPS.

Les projets obtenant leurs dépendances en utilisant les mêmes commenceront à faire face à des problèmes. Pour des solutions rapides, procédez comme suit dans votre build.gradle

au lieu de

repositories {
jcenter ()
//others
}

utilisez ceci:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}
saurabh gupta
la source
4

L'erreur:

Impossible de transférer le fichier: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .

Le code retour est: 501, ReasonPhrase: HTTPS Obligatoire.

Analyse de la cause originelle:

Maven central s'attend à ce que les clients utilisent https, mais le client effectue uniquement une requête HTTP simple.

Par conséquent, la demande de téléchargement du package nommé «wagon-ssh-2.1.pom» a échoué.

Comment resoudre le probleme?

Remplacez l'URL " http://repo.maven.apache.org/maven2 "

avec " https://repo.maven.apache.org/maven2 "

dans le fichier pom.xml ou le fichier build.gradle du projet.

Gopinath
la source
2
où dois-je remplacer cette URL
dhS
3

Partager cela au cas où quelqu'un en aurait besoin:

Configuration Old Gradle (sans Gitlab, déploiements Docker, pour des projets simples)

repositories {
google()
jcenter()

maven { url "http://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'http://repo1.maven.org/maven2' }
maven { url 'http://jcenter.bintray.com' }
}

Nouvelle configuration:

repositories {
google()
jcenter()

maven { url "https://dl.bintray.com/davideas/maven" }
maven { url 'https://plugins.gradle.org/m2/' }
maven { url 'https://repo1.maven.org/maven2' }
maven { url 'https://jcenter.bintray.com' }
}

Remarquez le https. Bon codage :)

BMU
la source
3

Mon environnement actuel ne prend pas en charge HTTPS, donc l'ajout de la version non sécurisée du dépôt a résolu mon problème: http://insecure.repo1.maven.org selon Sonatype

    <repositories>
       <repository>
          <id>Central Maven repository</id>
          <name>Central Maven repository insecure</name>
          <url>http://insecure.repo1.maven.org</url>
       </repository>
    </repositories>
Rega
la source
-3

Ajoutez le référentiel suivant dans pom.xml .

<project>
...
    <repositories>
        <repository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>https://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
...
</project>
Sathesh
la source
Cela provoquera le même problème car il utilisehttp
Yudhistira Arya
1
J'ai essayé cela à Pom et ça marche
Sathesh
j'ai aussi essayé et travailler x2
Javier J Solis Flores