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]

Arunan Sugunakumar
fonte
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 )

farasath
fonte
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>
Muhammad umer
fonte
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" }
}
Ashwani
fonte
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>
Sarjit
fonte
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>
Sumeet Vishwas
fonte
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>
mehulmpt
fonte
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.

JC Lombard
fonte
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" }
}
Adam M. Gamboa G.
fonte
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>
Samith
fonte
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

CAM_344
fonte
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.

Ellrohir
fonte
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.

Bhavik Shah
fonte
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>
Oscar Drai
fonte
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!

user2677034
fonte
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
}
saurabh gupta
fonte
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.

Gopinath
fonte
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 :)

BMU
fonte
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>
Rega
fonte
-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>
Sathesh
fonte
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