Las dependencias de Maven fallan con un error 501

154

Recientemente, los trabajos de compilación de Maven que se ejecutan en Jenkins fallan, con la excepción a continuación que dice que no pueden extraer dependencias de Maven Central y que deben usar HTTPS . No estoy seguro de cómo cambiar las solicitudes de HTTP a HTTPS . ¿Podría alguien guiarme en este asunto?

[ERROR] Extensión de compilación irresoluble: no se pudo resolver el
complemento org.apache.maven.wagon:wagon-ssh:2.1o una de sus dependencias: no se pudieron
recopilar dependencias para org.apache.maven.wagon:wagon-ssh:jar:2.1 (): no se
pudo leer el descriptor de artefactos para org.apache.maven.wagon:wagon-ssh:jar:2.1:
No se pudo transferir el artefacto org.apache.maven.wagon:wagon-ssh:pom:2.1desde / a la central ( http: //repo.maven.apache. org / maven2 ): no se
pudo transferir el archivo: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
El código de retorno es:501, ReasonPhrase:HTTPS Required. -> [Help 2]

Esperar a que Jenkins termine de recopilar el data[ERROR]
complemento org.apache.maven.plugins:maven-clean-plugin:2.4.1o una de sus dependencias no se pudo resolver: no se
pudo leer el descriptor de artefactos para org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
No se pudo transferir el artefacto org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1de / a central ( http://repo.maven.apache.org/maven2 ): no se
pudo archivo de transferencia: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
El código de retorno es:501 , ReasonPhrase:HTTPS Required. -> [Help 1]

Arunan Sugunakumar
fuente
55
Está utilizando la url repo.maven.apache.org/maven2 para conectarse a la central de maven, en su lugar use repo.maven.apache.org/maven2, es decir, use la conexión https
Manjunath HM
2
comprueba settings.xmlen jenkins la url central de maven
varontron
Hola Manjunath, tengo el mismo problema. ¿Sabes cómo obligar a Maven a usar HTTPS en lugar de HTTP
Lahiru Madushanka
@Lahiru Madushanka revise los enlaces, para que obtenga una respuesta a su pregunta stackoverflow.com/questions/25393298/…
Manjunath HM
1
He cambiado la versión de Maven a 3.6.3 y todavía muestra el mismo error
dhS

Respuestas:

130

La razón del error observado se explica en Central 501 HTTPS Requerido

A partir del 15 de enero de 2020, The Central Repository ya no admite comunicaciones inseguras a través de HTTP simple y requiere que todas las solicitudes al repositorio se cifren a través de HTTPS.

Parece que las últimas versiones de Maven (probadas con 3.6.0, 3.6.1) ya están usando la URL HTTPS de forma predeterminada.

Estas son las fechas en que cambiarán los principales repositorios:

Sus compilaciones de Java podrían romperse a partir del 13 de enero (si aún no ha cambiado el acceso de repositorio a HTTPS)

Actualización: Parece que desde Maven 3.2.3 se accede a Maven Central a través de HTTPS Consulte https://stackoverflow.com/a/25411658/5820670

Registro de cambios de Maven ( http://maven.apache.org/docs/3.2.3/release-notes.html )

farasath
fuente
26
¡Hola! Soy el investigador original que inició esta iniciativa en toda la industria. Puede encontrar mi publicación de blog sobre las fechas importantes aquí también: medium.com/@jonathan.leitschuh/…
Jonathan Leitschuh
1
@ JonathanLeitschuh, por favor escriba una respuesta completa que pueda ser votada y aceptada ...
Thorbjørn Ravn Andersen
1
Estoy usando maven 3.6.0 en Ubuntu 18.04 pero no parece estar usando https url.
Ashutosh
@Ashutosh: lo mismo con Maven 3.6.1 en Ubuntu 19.10. No estoy seguro de por qué este es el caso, podría ser un parche de Ubuntu, pero ¿por qué harían eso?). Para resolver esto, use cualquiera de las respuestas a continuación que actualice el settings.xmlarchivo (y vótelas, por favor, ya que esta es la solución correcta, aparte de usar un Maven parcheado).
Guss
Entonces, explícitamente me configuré settings.xmlpara usar repositorios HTTPS ... con los cuales puede, wgetpero por alguna razón muy extraña mvn archetype:generate -X(para probar si las dependencias se pueden descargar) todavía imprime que está accediendo a ¿ Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Alguna ayuda, por favor?
Giorgi Tsiklauri
62

Estoy enfrentando el mismo problema. Intenté dos soluciones, y ambas funcionan bien para mí.

  • Actualice el repositorio de la versión de Maven (versión de Maven> = 3.2.3)
  • Restrinja la versión actual de Maven para usar enlaces HTTPS.

Actualice el repositorio de la versión de Maven:

Descargue el binario Apache Maven que incluye las direcciones https predeterminadas ( binario Apache Maven 3.6.3 ). Y abra la ventana de diálogo Opciones en las herramientas de la barra de menú de NetBeans ( Java Maven Dialog View ). Y seleccione la opción de exploración en el Cuadro de lista de inicio de Maven ( Vista del cuadro de lista de inicio de Maven ). Después de agregar la versión recientemente descargada de Apache Maven ( Vista de cuadro de lista de inicio actualizada de Maven ), el proyecto se construye y se ejecuta con éxito.

Restrinja la versión actual de Maven para usar enlaces HTTPS:

Incluya el siguiente código en pom.xml de su proyecto.

<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
fuente
Tenía el repositorio central pero no el repositorio central de complementos. Eso me lo arregló.
ponder275
1
Restrinja la versión actual de Maven para usar enlaces HTTPS: funcionó para mí.
Mohammad Anas
En mi caso, me perdí la parte <pluginRepository> y recibí errores al usar arquetipos porque el valor predeterminado era http para los complementos.
user1708042
Esto también me lo solucionó, pero recibí otro error "Recibí una alerta fatal: protocol_version" y tuve que cambiar a Java 8 para solucionarlo, en caso de que alguien se encuentre con el mismo problema.
Kim Tang
Estoy feliz de haber contribuido con el voto a favor rompiendo el empate. Esta respuesta abordó el problema similar que estaba experimentando.
Brian Risk
36

A partir del 15 de enero de 2020, The Central Repository ya no admite comunicaciones inseguras a través de HTTP simple y requiere que todas las solicitudes al repositorio se cifren a través de HTTPS .

Si recibe este error, debe reemplazar todas las referencias de URL a Maven Central con sus equivalentes canónicos HTTPS.

( fuente )

Hemos realizado los siguientes cambios en el build.gradle de mi proyecto:

Antiguo:

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

Nuevo:

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Ashwani
fuente
Sí, tengo reemplazar en el archivo setting.xml pero desafortunadamente todavía no funciona. ¿Lo estoy haciendo bien o hay algún otro archivo que deba cambiar?
Sumeet Vishwas
@SumeetVishwas ¿Puede compartir un archivo de configuración settings.xml de muestra?
Arunan Sugunakumar
3
@ArunanSugunakumar no cambié en settings.xml. Todo lo que necesitas cambiar en POM. actualizar el repositorio central de maven. Puse la muestra del repositorio central en el hilo de respuesta. por favor encuentre abajo
Sumeet Vishwas
1
La pregunta del OP dice: "No estoy seguro de cómo cambiar las solicitudes de HTTP a HTTPS". Esta respuesta no aborda la pregunta.
wchargin
28

Intente presionar la siguiente URL en cualquier navegador. Devolverá 501

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

Por favor, intente con https. Descargará un archivo pom.xml:

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

Añádalo ( https://repo.maven.apache.org/maven2 ) en el archivo 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
fuente
1
¿Puede proporcionar un ejemplo de un setting.xml completo ya que he intentado agregar sin éxito lo anterior en el archivo?
jhertz
Encontré esta respuesta que
aclaraba
22

Actualice el repositorio central de Maven y use https en lugar 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
fuente
Intenté esto en Pom y funcionó bien: <repositorios> <repository> <id> central repo https </id> <name> Central Repository Https </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repositories>.
Lam
1
Gracias. Esto está funcionando en ubuntu 18.10, usando Netbeans. Tuve que configurar Maven a casa con la última versión de Maven en Netbeans. ¿Dónde encontraste esta solución?
Sanal S
Es posible que también deba actualizar el repositorio de complementos. Al menos tenía que hacerlo también para mí, para poder solucionarlo.
Kim Tang
16

Estaba usando una instalación limpia de Maven / Java en un contenedor Docker.

Para mí, tuve que cd $M2_HOME/confeditar el settings.xmlarchivo allí. Agregue el siguiente bloque dentro<mirrors>...</mirrors>

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>
mehulmpt
fuente
¿Podría por favor compartir su Dockerfile? ¡Tengo el mismo problema pero no sé cómo solucionarlo!
Han Van Pham
@HanVanPham Actualicé mi maven a la última versión, tiene este problema http solucionado.
mehulmpt
Para mí, la adaptación del bloque central-seguro en el archivo settings.xml local ($ HOME / .m2 / settings.xml) funcionó perfectamente.
t3az0r
13

Estaba usando una versión desactualizada de Maven (3.0.3 y 3.1). Estas versiones anteriores ya no admiten repositorios http (como se mencionó anteriormente). Actualizar a Maven 3.6 fue la solución para mí.

JC Lombard
fuente
1
Desde maven 3.2.3, Central accede a través de HTTPS de manera predeterminada maven.apache.org/docs/3.2.3/release-notes.html
farasath
12

Maven se está moviendo a HTTPS y está deshabilitando el acceso HTTP

En pocas palabras, desde el 15 de enero de 2020, el repositorio de Maven Central ya no admite conexiones HTTP (otros repositorios están haciendo lo mismo). Por lo tanto, indicará su configuración de Maven / Gradle para usar una URL HTTPS.

Solución:

Puede elegir uno de los siguientes tres enfoques.

  1. Agregue un repositorio en el pom.xmlarchivo de su proyecto

    <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. Agregue el repositorio a un perfil en el settings.xmlarchivo.

    <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. Actualice su versión de Maven a una nueva que use los valores https de forma predeterminada. El último en este momento 3.6.3 Descargar aquí

Para Gradle:

Solo reemplace la URL para la versión HTTPS.

repositories {
   maven { url "https://repo.maven.apache.org/maven2" }
}
Adam M. Gamboa G.
fuente
Para actualizar (3.3.9 a 3.6.3), ¿primero necesita desinstalar por completo la versión anterior? ¿O simplemente instala la última versión?
BigRedEO
1
@BigRedEO Puede tener más de una versión de Maven en su entorno. Sin embargo, sus variables env $M2_HOMEo $PATH solo apuntarán a una de ellas, que será su versión predeterminada de Maven. Preferiría desinstalar la anterior antes de instalar una nueva. Pero eso depende de tus necesidades.
Adam M. Gamboa G.
10

Se agregó el siguiente segmento de código a setting.xml y se resolvió el problema,

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

Tengo el mismo problema, pero uso GitLab en lugar de Jenkins. Los pasos que tuve que hacer para superar el problema:

  1. Mi proyecto está en GitLab, por lo que usa el archivo .yml que apunta a una imagen de Docker. Tengo que hacer una integración continua, y la imagen que usa tiene las URL http: // maven . Así que cambié eso a https: // maven .
  2. Esa misma imagen de Dockerfile tenía una versión anterior de Maven 3.0.1 que me dio problemas de la noche a la mañana. Actualicé el Dockerfile para obtener la última versión 3.6.3
  3. Luego implementé esa imagen en mi repositorio en línea y actualicé mi archivo de proyecto Maven para usar esa nueva imagen.
  4. Y, por último, actualicé mi archivo POM de proyectos principales para hacer referencia a https: // maven ... en lugar de http: // maven

Me doy cuenta de que es más específico para mi configuración. Pero sin seguir todos los pasos anteriores, seguiría recibiendo este mensaje de error Return code is: 501 , ReasonPhrase:HTTPS Required

CAM_344
fuente
¿Podría por favor compartir su Dockerfile?
Han Van Pham
8

Como se indicó en otras respuestas, ahora se requiere https para realizar solicitudes a Maven Central, mientras que las versiones anteriores de Maven usan http .

Si no desea / no puede actualizar a Maven 3.2.3+, puede hacer una solución agregando el siguiente código en su MAVEN_HOME \ conf \ settings.xml en la <profiles>sección:

<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>

Esta será siempre una configuración activa a menos que la desactive / anule en su POM cuando sea necesario.

Ellrohir
fuente
7

Para todos los codificadores corporativos, idealmente, si obtiene este error, significa que su código base todavía se está construyendo a partir de una comunidad de código abierto. Debe anular el repositorio "central" con el administrador de repositorio Maven de su empresa interna.

Puede ir a settings.xml y anular la URL de su repositorio central de http: // a https: //

<M2_HOME>/conf/settings.xml

Encuentre las secciones de espejos y agregue la siguiente entrada:

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

En la sección de URL, si estaba utilizando http://repo1.maven.org/maven2/ o http://repo.maven.apache.org/maven2/ entonces

Reemplace http://repo1.maven.org/maven2/ con https://repo1.maven.org/maven2/

Reemplace http://repo.maven.apache.org/maven2/ con https://repo.maven.apache.org/maven2/

Lo ideal es utilizar la URL de gestión / repositorio de control de origen de su empresa aquí. Como esto bloqueará cualquier contacto con la comunidad de repositorio Maven de código abierto.

Como se menciona en otras respuestas, en vigencia a partir del 15 de enero de 2020, el repositorio central de Maven no admite comunicación insegura sobre HTTP simple.

Bhavik Shah
fuente
Después de agregar el espejo en la sección de espejos, tengo un error, ese par no está autenticado. ¿Qué debería hacer ahora? ¡Gracias!
dimson
@dimson Esto significa que trató de conectarse con https pero le faltaba el certificado de autenticación, probablemente porque Java no lo tenía. Importe el certificado del repositorio al almacén de claves de Java o actualice Java.
tibortru
@tibortru Thanx Man, ya resuelve el problema. He agregado estas propiedades a maven en IDE: maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https. protocolos = TLSv1, TLSv1.1, TLSv1.2. Después de eso todo funciona bien.
Dimson
Sí, bueno, esa es la otra manera. No seguro :)
tibortru
7

Para mí (codificador corporativo) también agregué un repositorio espejo en settings.xmlel problema solucionado. También estoy usando Maven dentro de un contenedor acoplable.

<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
fuente
¿Podría mostrarme dónde podemos encontrar el archivo settings.xml, @Oscar?
Han Van Pham
¡Por supuesto! En nuestro Dockerfile, primero lo colocamos en una carpeta temporal como esta: echo "<settings> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Luego, ejecutamos maven con la opción "-s" y pasamos la ruta al archivo de configuración como "mvn -s /tmp/maven-settings.xml clean". ¡Espero eso ayude!
Oscar Drai
@ han-van-pham lo encuentras en $ HOME / .m2 /. Si no, créelo allí.
dr0i
4

Usando Ubuntu 16.04, java 1.8.0_201.

Desinstalé Maven viejo e instalé Maven 3.6.3, todavía recibí este error de que las dependencias de Maven están fallando con un error 501.

Se dio cuenta de que podría tratarse de un problema de almacén de confianza / almacén de claves asociado con la necesidad de https. Descubrió que ahora puede configurar las opciones de -Djavax utilizando un archivo jvm.config, consulte: https://maven.apache.org/configure.html .

Como también estoy usando Tomcat, copié la configuración del almacén de claves y el almacén de confianza de Tomcat (setenv.sh) a mi jvm.config y luego funcionó.

También hay una opción para pasar esta configuración en 'exportar MAVEN_OPTS' (cuando se usa mvn generate) pero aunque esto detuvo el error 501, creó otro: esperaba un archivo pom.

Crear un archivo jvm.config separado funciona perfectamente, solo póngalo en la raíz de su proyecto.

Espero que esto ayude a alguien, ¡me llevó todo el día resolverlo!

usuario2677034
fuente
4

El mismo problema también está ocurriendo para jcenter .

A partir del 13 de enero de 2020, Jcenter solo está disponible en HTTPS.

Los proyectos que obtienen sus dependencias usando el mismo comenzarán a enfrentar problemas. Para soluciones rápidas, haga lo siguiente en su build.gradle

en vez de

repositories {
jcenter ()
//others
}

utilizar este:

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

El error:

Error al transferir el archivo: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .

El código de retorno es: 501, ReasonPhrase: HTTPS obligatorio.

Análisis de raíz de la causa:

Maven central espera que los clientes usen https, pero el cliente solo realiza una solicitud HTTP simple.

Por lo tanto, la solicitud para descargar el paquete llamado 'wagon-ssh-2.1.pom' había fallado.

¿Como solucionar el problema?

Reemplace la URL " http://repo.maven.apache.org/maven2 "

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

en el archivo pom.xml o en el archivo build.gradle del proyecto.

Gopinath
fuente
2
¿Dónde puedo reemplazar esta url
dhS
3

Compartir esto en caso de que alguien lo necesite:

Configuración antigua de Gradle (sin Gitlab, implementaciones de Docker, para proyectos 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' }
}

Nueva configuración:

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' }
}

Observe el https. Feliz codificación :)

BMU
fuente
3

Mi entorno actual no es compatible con HTTPS, por lo que agregar la versión insegura del repositorio resolvió mi problema: http://insecure.repo1.maven.org según Sonatype

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

Agregue el siguiente repositorio en 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
fuente
Esto causará el mismo problema porque está usandohttp
Yudhistira Arya
1
Probé
también lo intenté y trabajo x2
Javier J Solis Flores