Dependências do Maven estão falhando com um erro 501


154

Recentemente, os trabalhos de criação do Maven em execução no Jenkins estão falhando, com a exceção abaixo dizendo que eles não podiam obter dependências do Maven Central e deveriam usar HTTPS . Não sei como alterar as solicitações de HTTP para HTTPS . Alguém poderia me orientar sobre esse assunto?

[ERRO] Extensão de compilação não resolvível: não foi possível resolver o
plug - in org.apache.maven.wagon:wagon-ssh:2.1ou uma de suas dependências:
falha ao coletar dependências para org.apache.maven.wagon:wagon-ssh:jar:2.1 ():
falha ao ler o descritor de artefato para org.apache.maven.wagon:wagon-ssh:jar:2.1:
não foi possível transferir o artefato org.apache.maven.wagon:wagon-ssh:pom:2.1de / para a central ( http: //repo.maven.apache. org / maven2 ):
falha ao transferir o arquivo: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
O código de retorno é:501, ReasonPhrase:HTTPS Required. -> [Help 2]

Não foi possível resolver a espera de Jenkins concluir a coleta do data[ERROR]
plug org.apache.maven.plugins:maven-clean-plugin:2.4.1- in ou de uma de suas dependências:
falha ao ler o descritor de artefato para org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
não foi possível transferir o artefato org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1de / para a central ( http://repo.maven.apache.org/maven2 ):
falha ao arquivo de transferência: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
O código de retorno é:501 , ReasonPhrase:HTTPS Required. -> [Help 1]


5
Você está usando o URL repo.maven.apache.org/maven2 para se conectar à central do maven, em vez disso, use repo.maven.apache.org/maven2, ou seja, use conexão https
— Manjunath HM

2
verifique seu settings.xmljenkins para o maven central url
— varontron 16/01

Oi Manjunath, tenho o mesmo problema. Você sabe como forçar o maven a usar HTTPS em vez de HTTP
— Lahiru Madushanka

@Lahiru Madushanka percorre os links, para que você obtenha uma resposta para sua pergunta stackoverflow.com/questions/25393298/…
— Manjunath HM

11
Eu mudei a versão maven para 3.6.3 e ainda mostra o mesmo erro
— dhS 16/03

Respostas:


129

A razão do erro observado é explicada em Central 501 HTTPS obrigatório

A partir de 15 de janeiro de 2020, o Repositório Central não oferece mais suporte à comunicação insegura por HTTP simples e exige que todas as solicitações ao repositório sejam criptografadas por HTTPS.

Parece que as versões mais recentes do Maven (tentadas com 3.6.0, 3.6.1) já estão usando o URL HTTPS por padrão.

Aqui estão as datas em que os principais repositórios mudarão:

Suas compilações Java podem ser interrompidas a partir de 13 de janeiro (se você ainda não tiver alterado o acesso ao repositório para HTTPS)

Atualização: Parece que do maven 3.2.3 o maven central é acessado via HTTPS Consulte https://stackoverflow.com/a/25411658/5820670

Registro de alteração do Maven ( http://maven.apache.org/docs/3.2.3/release-notes.html )


26
Oi! Sou o pesquisador original que deu início a essa iniciativa ampla do setor. Você também pode encontrar aqui no meu blog as datas importantes: medium.com/@jonathan.leitschuh/…
— Jonathan Leitschuh

11
@JonathanLeitschuh, por favor escreva uma resposta completa que possa ser votada e aceita ...
— Thorbjørn Ravn Andersen 16/01

11
Estou usando o maven 3.6.0 no Ubuntu 18.04, mas ele não parece estar usando https url.
— Ashutosh

@Ashutosh: a mesma coisa com o Maven 3.6.1 no Ubuntu 19.10. Não sei por que esse é o caso, poderia ser um patch do Ubuntu, mas por que eles fariam isso?). Para resolver isso, use qualquer uma das respostas abaixo que atualizem o settings.xmlarquivo (e as atualize , por favor, pois esta é a solução correta, além de usar um Maven corrigido).
— Guss

Então, eu configurei explicitamente settings.xmlpara usar repositórios HTTPS .. com os quais ele pode, wgetmas por algum motivo muito estranho mvn archetype:generate -X(para testar apenas se as dependências podem ser baixadas), ele ainda imprime que está acessando Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Qualquer ajuda, por favor ..?
— Giorgi Tsiklauri

61

Estou enfrentando o mesmo problema. Tentei duas soluções e ambas funcionam bem para mim.

  • Atualize o repositório da versão do Maven (versão do Maven> = 3.2.3)
  • Restrinja a versão atual do Maven para usar os links HTTPS.

Atualize o repositório da versão do Maven:

Faça o download do binário do Apache Maven que inclui os endereços https padrão ( binário do Apache Maven 3.6.3 ). E abra a janela de diálogo Opções nas ferramentas da barra de menus do NetBeans ( Java Maven Dialog View ). E selecione a opção de navegação na caixa de listagem inicial do Maven ( exibição da caixa de listagem inicial do Maven ). Após adicionar a versão recém-baixada do Apache Maven ( exibição atualizada da caixa de listagem inicial do Maven ), o projeto é construído e executado com êxito.

Restrinja a versão atual do Maven para usar os links HTTPS:

Inclua o seguinte código no pom.xml do seu projeto.

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

Eu tinha o repositório central, mas não o repositório central de plugins. Isso consertou para mim.
— ponder275 31/01

11
Restrinja a versão atual do Maven para usar os links HTTPS: funcionou para mim.
— Mohammad Anas

No meu caso, perdi a parte <pluginRepository> e estava recebendo erros ao usar arquétipos, porque o padrão era http para os plugins.
— user1708042 12/02

Isso também foi corrigido para mim, mas recebi outro erro "Alerta fatal recebido: protocol_version" e tive que mudar para o java 8 para corrigi-lo, no caso de alguém encontrar o mesmo problema.
— Kim Tang

Estou feliz por ter contribuído com o voto positivo para quebrar o empate. Esta resposta abordou o problema semelhante que estava enfrentando.
— Brian Risk

36

A partir de 15 de janeiro de 2020, o Repositório Central não oferece mais suporte à comunicação insegura por HTTP simples e exige que todas as solicitações ao repositório sejam criptografadas por HTTPS .

Se você estiver recebendo esse erro, precisará substituir todas as referências de URL ao Maven Central por suas contrapartes HTTPS canônicas.

( fonte )

Fizemos as seguintes alterações no build.gradle do meu projeto:

Velho:

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

Novo:

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

Sim, eu tenho substituir no arquivo setting.xml, mas infelizmente ainda não está funcionando. Estou fazendo certo ou é necessário alterar outro arquivo?
— Sumeet Vishwas 16/01

@SumeetVishwas Você pode compartilhar um arquivo settings.xml de amostra?
— Arunan Sugunakumar 16/01

3
@ArunanSugunakumar eu não mudei no settings.xml. Tudo o que você precisa alterar no POM. atualize o repositório central do maven. Coloquei a amostra do repositório central no segmento de resposta. por favor encontre abaixo
— Sumeet Vishwas

11
A pergunta do OP diz: "Não tenho certeza de como alterar as solicitações de HTTP para HTTPS". Esta resposta não aborda a questão.
— wchargin 16/01

28

Tente acessar o URL abaixo em qualquer navegador. Retornará 501

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

Por favor, tente com https. Ele fará o download de um arquivo pom.xml:

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

Por favor, adicione-o ( https://repo.maven.apache.org/maven2 ) no arquivo 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>

11
Você pode fornecer um exemplo de um setting.xml completo, pois tentei sem êxito adicionar o arquivo acima ao arquivo?
— jhertz 18/02

Encontrei esta resposta que tornava a localização no arquivo mais clara, agora funciona: stackoverflow.com/a/59784045/3120576
— jhertz 18/02

22

Atualize o repositório central do Maven e use https em vez 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>

Tentei isso em Pom e funcionou bem: <repositórios> <repositório> <id> repositório central https </id> <name> Https do repositório central </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repositories>.
— lam

11
Obrigado. Isso está funcionando no ubuntu 18.10, usando o Netbeans. Tinha que definir o Maven em casa para a versão mais recente do Maven no Netbeans. Onde você encontrou essa solução?
— Sanal S

Pode ser necessário atualizar o repositório de plugins também. Pelo menos tinha que ser feito por mim também, para ser consertado.
— Kim Tang

16

Eu estava usando uma instalação limpa do Maven / Java em um contêiner do Docker.

Para mim, eu tive que cd $M2_HOME/confeditar o settings.xmlarquivo lá. Adicione o seguinte bloco dentro<mirrors>...</mirrors>

<mirror>
  <id>central-secure</id>
  <url>https://repo.maven.apache.org/maven2</url>
  <mirrorOf>central</mirrorOf>
</mirror>

Você poderia compartilhar seu Dockerfile? Eu tenho o mesmo problema, mas não sei como consertar isso!
— Han Van Pham

@HanVanPham Atualizei meu maven para a versão mais recente, ele tem esse problema http corrigido.
— mehulmpt 22/01

Para mim, também, a adaptação do bloco de segurança central no arquivo local settings.xml ($ HOME / .m2 / settings.xml) funcionou perfeitamente.
— t3az0r 14/04

13

Eu estava usando uma versão desatualizada do Maven (3.0.3 e 3.1). Essas versões mais antigas não são mais compatíveis com repositórios http (como mencionado acima). Atualizar para o Maven 3.6 foi a correção para mim.


11
De Maven 3.2.3, Central está acessando via HTTPS por padrão maven.apache.org/docs/3.2.3/release-notes.html
— farasath

12

O Maven está migrando para HTTPS e desativando o acesso HTTP

Em resumo, a partir de 15 de janeiro de 2020, o repositório do Maven Central não oferece mais suporte a conexões HTTP (outros repositórios estão fazendo o mesmo). Portanto, você indicará suas configurações de Maven / Gradle para usar um URL HTTPS.

Solução:

Você pode escolher uma das três abordagens a seguir.

  1. Adicione um repositório no pom.xmlarquivo do seu projeto

    <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. Inclua o repositório em um perfil no settings.xmlarquivo.

    <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. Atualize sua versão do maven para uma nova que use valores https como padrão. O último deste momento 3.6.3 Faça o download aqui

Para Gradle:

Substitua apenas o URL da versão HTTPS.

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

Para atualizar (3.3.9 a 3.6.3), você precisa desinstalar completamente a versão antiga primeiro? Ou apenas instalar a versão mais recente?
— BigRedEO

11
@BigRedEO Você pode ter mais de uma versão automatizada em seu ambiente. No entanto, suas $M2_HOMEou suas $PATH variáveis ​​env apontarão apenas para uma delas, que será sua versão padrão do maven. Eu preferiria desinstalar o mais antigo antes de instalar um mais novo. Mas isso depende de suas necessidades.
— Adam M. Gamboa G.

10

Fui adicionado após o segmento de código ao setting.xml e foi resolvido o problema,

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

9

Tenho o mesmo problema, mas uso o GitLab em vez do Jenkins. As etapas que tive que fazer para solucionar o problema:

  1. Meu projeto está no GitLab, portanto, ele usa o arquivo .yml, que aponta para uma imagem do Docker, que eu tenho que fazer integração contínua, e a imagem que ele usa possui os URLs http: // maven . Então eu mudei isso para https: // maven .
  2. Essa mesma imagem do Dockerfile tinha uma versão mais antiga do Maven 3.0.1 que me dava problemas durante a noite. Atualizei o Dockerfile para obter a versão mais recente 3.6.3
  3. Em seguida, implantei essa imagem no meu repositório online e atualizei o ymlfile do projeto Maven para usar essa nova imagem.
  4. E, por último, atualizei meu arquivo POM dos principais projetos para referenciar https: // maven ... em vez de http: // maven

Percebo que é mais específico para minha configuração. Mas, sem executar todas as etapas acima, continuarei recebendo a mensagem de erro Return code is: 501 , ReasonPhrase:HTTPS Required


Você poderia compartilhar seu Dockerfile?
— Han Van Pham

8

Conforme declarado em outras respostas, agora é necessário https para fazer solicitações ao Maven Central, enquanto versões mais antigas do Maven usam http .

Se você não deseja / não pode atualizar para o Maven 3.2.3+, você pode executar uma solução alternativa adicionando o seguinte código ao seu MAVEN_HOME \ conf \ settings.xml na <profiles>seção:

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

Essa será sempre uma configuração ativa, a menos que você a desative / substitua no POM, quando necessário.


7

Para todos os codificadores corporativos, idealmente, se você receber esse erro, isso significa que sua base de códigos ainda está sendo construída a partir da comunidade de código aberto. Você precisa percorrer o repositório "central" com seu gerente de repositório Maven da empresa.

Você pode acessar o arquivo settings.xml e substituir o URL do repositório central de http: // para https: //

<M2_HOME>/conf/settings.xml

Encontre as seções de espelhos e adicione a seguinte 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>

Na seção URL, se você estivesse usando http://repo1.maven.org/maven2/ ou http://repo.maven.apache.org/maven2/ então

Substitua http://repo1.maven.org/maven2/ por https://repo1.maven.org/maven2/

Substitua http://repo.maven.apache.org/maven2/ por https://repo.maven.apache.org/maven2/

Idealmente, você precisa usar a URL de gerenciamento / repositório de controle de origem da empresa aqui. Como isso bloqueará qualquer contato com a comunidade de repositórios Maven de código aberto.

Como mencionado em outras respostas, a partir de 15 de janeiro de 2020, o repositório central do Maven não suporta comunicação insegura através de HTTP simples.


Depois de adicionar o espelho na seção de espelhos, recebi um erro, esse ponto não autenticado. O que eu deveria fazer agora? Obrigado!
— dimson 23/01

@ dimson Isso significa que você tentou se conectar com https, mas estava faltando o certificado de autenticação, provavelmente por não ter o Java. Importe o certificado do repositório para o keystore java ou atualize o java.
— tibortru 23/01

@tibortru Thanx Man, já resolve o problema. Adicionei essas propriedades ao maven no 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. Depois disso tudo funciona bem.
— dimson 23/01

Sim, bem, é o contrário. Um não-seguro :)
— tibortru 23/01

7

Para mim (codificador corporativo) também adicionando um repositório de espelho na settings.xmlcorreção do problema. Também estou usando o Maven dentro de um contêiner.

<mirrors>
    <mirror>
        <id>https-mirror</id>
        <name>Https Mirror Repository</name>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

Você poderia me mostrar onde podemos encontrar o arquivo settings.xml, @Oscar?
— Han Van Pham

Certo! Em nosso Dockerfile, primeiro o colocamos em uma pasta temporária como esta: echo "<settings> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Em seguida, executamos o maven com a opção "-s" e passamos o caminho para o arquivo de configurações como este "mvn -s /tmp/maven-settings.xml clean". Espero que ajude!
— Oscar Drai 23/01

@ han-van-pham você encontra em $ HOME / .m2 /. Caso contrário, crie-o lá.
— dr0i 16/03

4

Usando o Ubuntu 16.04, java 1.8.0_201.

Desinstalei o maven antigo e instalei o Maven 3.6.3, ainda recebi este erro que as dependências do Maven estão falhando com um erro 501.

Percebeu que poderia haver um problema no armazenamento confiável / keystore associado à solicitação de https. Concluiu que agora você pode configurar as opções -Djavax usando um arquivo jvm.config, consulte: https://maven.apache.org/configure.html .

Como também estou usando o Tomcat, copiei a configuração keystore & truststore do Tomcat (setenv.sh) para o meu jvm.config e funcionou!

Também existe uma opção para passar esta configuração em 'export MAVEN_OPTS' (ao usar o mvn generate), mas embora isso tenha parado o erro 501, ele criou outro: esperava um arquivo pom.

Criar um arquivo jvm.config separado funciona perfeitamente, basta colocá-lo na raiz do seu projeto.

Espero que isso ajude alguém, me levou o dia todo para descobrir!


4

O mesmo problema também está ocorrendo para o jcenter .

A partir de 13 de janeiro de 2020, o Jcenter está disponível apenas no HTTPS.

Os projetos que obtêm suas dependências usando o mesmo começarão a enfrentar problemas. Para correções rápidas, faça o seguinte em seu build.gradle

ao invés de

repositories {
jcenter ()
//others
}

usa isto:

repositories {
jcenter { url "http://jcenter.bintray.com/"}
//others
}

4

O erro:

Falha ao transferir o arquivo: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .

O código de retorno é: 501, ReasonPhrase: HTTPS Necessário.

Análise de causa raiz:

O Maven central espera que os clientes usem https, mas o cliente está fazendo apenas uma solicitação HTTP simples.

Portanto, a solicitação de download do pacote chamado 'wagon-ssh-2.1.pom' falhou.

Como resolver o problema?

Substitua o URL " http://repo.maven.apache.org/maven2 "

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

no arquivo pom.xml ou no arquivo build.gradle do projeto.


2
Onde eu substituo este URL
— dhS 16/03

3

Compartilhando isso caso alguém precise:

Configuração Old Gradle (sem implantações do Gitlab, Docker, para projetos 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' }
}

Nova configuração:

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 o https. Feliz codificação :)


3

Meu ambiente atual não suporta HTTPS, portanto, a adição de uma versão não segura do repositório resolveu meu problema: http://insecure.repo1.maven.org conforme Sonatype

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

-3

Adicione o seguinte repositório no 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>

Isso causará o mesmo problema porque está sendo usadohttp
— Yudhistira Arya 18/01

11
Eu tentei isso em Pom e está funcionando
— Sathesh

eu tentei também e trabalho x2
— Javier J Solis Flores
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.