Le dipendenze Maven non riescono con un errore 501


154

Recentemente i lavori di costruzione di Maven in esecuzione su Jenkins non riescono con l'eccezione di seguito che afferma che non sono in grado di estrarre dipendenze da Maven Central e che dovrebbero utilizzare HTTPS . Non sono sicuro di come modificare le richieste da HTTP a HTTPS . Qualcuno potrebbe guidarmi su questo argomento?

[ERRORE] Estensione build irrisolvibile: non è stato possibile risolvere il
plug-in org.apache.maven.wagon:wagon-ssh:2.1o una delle sue dipendenze:
Impossibile raccogliere dipendenze per org.apache.maven.wagon:wagon-ssh:jar:2.1 ():
Impossibile leggere il descrittore di artefatto per org.apache.maven.wagon:wagon-ssh:jar:2.1:
Impossibile trasferire artefatto org.apache.maven.wagon:wagon-ssh:pom:2.1da / a centrale ( http: //repo.maven.apache. org / maven2 ):
Impossibile trasferire il file: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
Il codice di ritorno è:501, ReasonPhrase:HTTPS Required. -> [Help 2]

In attesa che Jenkins finisca di raccogliere il data[ERROR]
Plugin org.apache.maven.plugins:maven-clean-plugin:2.4.1o una delle sue dipendenze non potrebbe essere risolta:
Impossibile leggere il descrittore di artefatto per org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
Impossibile trasferire artefatto org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1da / a centrale ( http://repo.maven.apache.org/maven2 ):
Impossibile file di trasferimento: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
Il codice di ritorno è:501 , ReasonPhrase:HTTPS Required. -> [Help 1]


5
Stai usando l' URL repo.maven.apache.org/maven2 per connetterti alla centrale maven , invece usa repo.maven.apache.org/maven2 cioè usa la connessione https
Manjunath HM

2
controlla il tuo settings.xmlin jenkins per l'URL centrale
maven

Ciao Manjunath, ho lo stesso problema. Sai come forzare Maven a usare HTTPS invece di HTTP
Lahiru Madushanka

@Lahiru Madushanka passare attraverso i link, in modo da ottenere una risposta per la tua domanda stackoverflow.com/questions/25393298/...
Manjunath HM

1
Ho modificato la versione Maven in 3.6.3 e mostra ancora lo stesso errore
DSL

Risposte:


130

Il motivo dell'errore osservato è spiegato in Central 501 HTTPS obbligatorio

A partire dal 15 gennaio 2020, il repository centrale non supporta più comunicazioni non sicure su HTTP semplice e richiede che tutte le richieste al repository siano crittografate su HTTPS.

Sembra che le ultime versioni di Maven (provato con 3.6.0, 3.6.1) stiano già usando l'URL HTTPS per impostazione predefinita.

Ecco le date in cui i principali repository cambieranno:

Le build Java potrebbero interrompersi a partire dal 13 gennaio (se non hai ancora cambiato l'accesso repo a HTTPS)

Aggiornamento: Sembra che da maven 3.2.3 maven central sia accessibile tramite HTTPS Vedi https://stackoverflow.com/a/25411658/5820670

Registro delle modifiche di Maven ( http://maven.apache.org/docs/3.2.3/release-notes.html )


26
Ciao! Sono il ricercatore originale che ha dato il via a questa iniziativa a livello di settore. Puoi trovare il mio post sul blog sulle date importanti anche qui: medium.com/@jonathan.leitschuh/…
Jonathan Leitschuh

1
@JonathanLeitschuh, per favore, scrivi una risposta completa che può essere votata e accettata ...
Thorbjørn Ravn Andersen,

1
Sto usando Maven 3.6.0 su Ubuntu 18.04 ma non sembra usare https url.
Ashutosh,

@Ashutosh: stessa cosa lì con Maven 3.6.1 su Ubuntu 19.10. Non sono sicuro del perché, potrebbe trattarsi di una patch di Ubuntu, ma perché dovrebbero farlo?). Per risolvere questo problema, usa una delle risposte sottostanti che aggiorna il settings.xmlfile (e votale, per favore, poiché questa è la soluzione corretta, oltre all'utilizzo di un Maven patchato).
Guss

Quindi, ho esplicitamente configurato settings.xmlper utilizzare i repository HTTPS .. che può, con wget, ma per qualche strana ragione mvn archetype:generate -X(per testare solo se le dipendenze possono essere scaricate) stampa ancora che sta accedendo a Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom Qualsiasi aiuto, per favore ..?
Giorgi Tsiklauri,

62

Sono di fronte allo stesso problema. Ci sono due soluzioni che ho provato ed entrambe funzionano bene per me.

  • Aggiorna il repository della versione Maven (versione Maven> = 3.2.3)
  • Limitare la versione Maven corrente per utilizzare i collegamenti HTTPS.

Aggiorna il repository della versione Maven:

Scarica il binario Apache Maven che include gli indirizzi https predefiniti ( binario Apache Maven 3.6.3 ). E apri la finestra di dialogo Opzioni negli strumenti della barra dei menu di NetBeans ( Java Maven Dialog View ). E selezionare l'opzione di esplorazione nella casella Elenco home Maven ( vista casella Elenco home Maven ). Dopo aver aggiunto la versione scaricata di recente di Apache Maven ( vista casella elenco home Maven aggiornata ), il progetto viene compilato ed eseguito correttamente.

Limitare la versione Maven corrente per utilizzare i collegamenti HTTPS:

Includi il seguente codice in pom.xml del tuo progetto.

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

Avevo il repository centrale ma non il repository di plugin centrale. Ciò ha risolto il problema per me.
ponder275

1
Limita la versione Maven corrente per utilizzare i collegamenti HTTPS: ha funzionato per me.
Mohammad Anas,

Nel mio caso ho perso la parte <pluginRepository> e stavo ricevendo errori quando usavo gli archetipi perché era predefinito http per i plugin.
user1708042,

Anche questo mi ha risolto, ma ho ricevuto un altro errore "Ricevuto avviso fatale: protocol_version" e ho dovuto passare a Java 8 per risolverlo, nel caso in cui qualcuno si imbattesse nello stesso problema.
Kim Tang,

Sono felice di aver contribuito al voto rompendo il pareggio. Questa risposta ha risolto il problema simile che stavo riscontrando.
Brian Risk

36

A partire dal 15 gennaio 2020, il repository centrale non supporta più comunicazioni non sicure su HTTP semplice e richiede che tutte le richieste al repository siano crittografate su HTTPS .

Se ricevi questo errore, devi sostituire tutti i riferimenti URL a Maven Central con le loro controparti HTTPS canoniche.

( fonte )

Abbiamo apportato le seguenti modifiche al build.gradle del mio progetto:

Vecchio:

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

Nuovo:

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

Sì, ho sostituito nel file setting.xml ma purtroppo non funziona ancora. Sto facendo bene o c'è qualche altro file da modificare?
Sumeet Vishwas era il

@SumeetVishwas Puoi condividere un file settings.xml di esempio?
Arunan Sugunakumar,

3
@ArunanSugunakumar non ho cambiato in settings.xml. Tutto ciò che devi cambiare in POM. aggiorna il repository centrale di maven. Ho inserito il campione del repository centrale nel thread di risposte. di seguito puoi trovare
Sumeet Vishwas

1
La domanda del PO dice: "Non sono sicuro di come modificare le richieste da HTTP a HTTPS". Questa risposta non risponde alla domanda.
mercoledì

28

Prova a colpire l'URL seguente in qualsiasi browser. Restituirà 501

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

Prova con https. Scaricherà un file pom.xml:

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

Aggiungilo ( https://repo.maven.apache.org/maven2 ) nel file 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>

1
Potete per favore fornire un esempio di setting.xml completo poiché ho tentato senza successo di aggiungere quanto sopra nel file?
jhertz,

Trovato questa risposta che ha fatto la posizione nel file più chiaro, ora funziona: stackoverflow.com/a/59784045/3120576
jhertz

22

Aggiorna il repository centrale di Maven e usa https invece di 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>

Ho provato questo in Pom e ha funzionato bene: <repository> <repository> <id> central repo https </id> <name> Central Repository Https </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repositories>.
Lam

1
Grazie. Questo funziona in Ubuntu 18.10, usando Netbeans. Ho dovuto riportare Maven a casa sull'ultima versione di Maven in Netbeans. Dove hai trovato questa soluzione?
Sanal,

Potrebbe essere necessario aggiornare anche il repository dei plug-in. Almeno doveva essere fatto anche per me, per essere risolto.
Kim Tang,

16

Stavo usando un'installazione pulita di Maven / Java su un contenitore Docker.

Per me, ho dovuto cd $M2_HOME/confe modificare il settings.xmlfile lì. Aggiungi il seguente blocco all'interno<mirrors>...</mirrors>

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

Potresti condividere il tuo Dockerfile? Ho avuto lo stesso problema ma non so come risolverlo!
Han Van Pham,

@HanVanPham Ho aggiornato il mio Maven all'ultima versione, ha risolto il problema con http.
Mehulmpt,

Anche per me l'adattamento del blocco central-secure nel file settings.xml locale ($ HOME / .m2 / settings.xml) ha funzionato perfettamente.
t3az0r,


12

Maven si sta spostando su HTTPS e sta disabilitando l'accesso HTTP

Per farla breve, dal 15 gennaio 2020, il repository Maven Central non supporta più le connessioni HTTP (altri repository fanno lo stesso). Pertanto, indichi le impostazioni di Maven / Gradle per utilizzare un URL HTTPS.

Soluzione:

Puoi scegliere uno dei seguenti tre approcci.

  1. Aggiungi un repository nel pom.xmlfile del tuo progetto

    <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. Aggiungi il repository in un profilo nel settings.xmlfile.

    <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. Aggiorna la tua versione originale con una nuova che utilizza i valori https come impostazione predefinita. L'ultimo in questo momento 3.6.3 Scarica qui

Per il grado:

Sostituisci l'URL solo per la versione HTTPS.

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

Per aggiornare (da 3.3.9 a 3.6.3) devi prima disinstallare completamente la versione precedente? O semplicemente installare l'ultima versione?
BigRedEO

1
@BigRedEO Puoi avere più di una versione di Maven nel tuo ambiente. Tuttavia, le $M2_HOMEtue $PATH variabili env o te indicheranno solo una di esse, che sarà la tua versione predefinita di maven. Preferirei disinstallare quello precedente prima di installarne uno più recente. Ma ciò dipende dalle tue esigenze.
Adam M. Gamboa G.

10

Sono stato aggiunto seguendo il segmento di codice in setting.xml ed è stato risolto il 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

Ho lo stesso problema, ma uso GitLab invece di Jenkins. I passaggi che ho dovuto fare per superare il problema:

  1. Il mio progetto è in GitLab, quindi usa il file .yml che punta a un'immagine Docker che devo fare un'integrazione continua, e l'immagine che usa ha gli URL http: // maven . Quindi l'ho cambiato in https: // maven .
  2. Quella stessa immagine Dockerfile aveva una versione precedente di Maven 3.0.1 che mi dava problemi durante la notte. Ho aggiornato il Dockerfile per ottenere l'ultima versione 3.6.3
  3. Ho quindi distribuito quell'immagine nel mio repository online e ho aggiornato il mio file yml del progetto Maven per utilizzare quella nuova immagine.
  4. Infine, ho aggiornato il file POM dei miei progetti principali per fare riferimento a https: // maven ... anziché a http: // maven

Mi rendo conto che è più specifico per la mia configurazione. Ma senza fare tutti i passaggi precedenti continuerei comunque a ricevere questo messaggio di errore Return code is: 501 , ReasonPhrase:HTTPS Required


Potresti condividere il tuo Dockerfile?
Han Van Pham,

8

Come indicato in altre risposte, https è ora richiesto per effettuare richieste a Maven Central, mentre le versioni precedenti di Maven utilizzano http .

Se non si desidera / non è possibile eseguire l'aggiornamento a Maven 3.2.3+, è possibile risolvere il problema aggiungendo il seguente codice nel proprio MAVEN_HOME \ conf \ settings.xml nella <profiles>sezione:

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

Questa sarà sempre un'impostazione attiva a meno che tu non la disattivi / ignori nel tuo POM quando necessario.


7

Per tutti i programmatori aziendali, idealmente, se si ottiene questo errore, significa che la base di codice è ancora in fase di creazione da parte della comunità open-source. Devi superare il repository "centrale" con il tuo gestore di repository Maven della società interna.

Puoi andare su settings.xml e sovrascrivere l'URL del repository centrale da http: // a https: //

<M2_HOME>/conf/settings.xml

Trova le sezioni dei mirror e aggiungi la seguente voce:

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

Nella sezione URL, se si utilizzava http://repo1.maven.org/maven2/ o http://repo.maven.apache.org/maven2/ allora

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

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

È necessario utilizzare idealmente l'URL di gestione / repository del controllo del codice sorgente dell'azienda qui. Poiché ciò bloccherà qualsiasi contatto con la comunità di repository Maven open source.

Come menzionato in altre risposte, a partire dal 15 gennaio 2020, il repository Maven centrale non supporta la comunicazione non sicura su HTTP semplice.


Dopo aver aggiunto il mirror nella sezione mirror ho riscontrato un errore, quel peer non autenticato. Cosa dovrei fare ora? Grazie!
Dimson

@dimson Questo significa che hai provato a connetterti con HTTPS ma mancava il certificato per l'autenticazione, probabilmente a causa della mancanza di Java. Importare il certificato dal repository nel keystore java o aggiornare java.
Tibet

@tibortru Thanx Man, risolvi già il problema. Ho aggiunto queste proprietà a maven in IDE: maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https. protocolli = TLSv1, TLSv1.1, TLSv1.2. Dopodiché tutto funziona bene.
Dimson

Sì, beh, è ​​il contrario. Non sicuro :)
tibortru

7

Per me (codificatore aziendale) anche l'aggiunta di un repository mirror nel settings.xmlrisolto il problema. Sto anche usando Maven all'interno di un container mobile.

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

Potresti mostrarmi dove possiamo trovare il file settings.xml, @Oscar?
Han Van Pham il

Sicuro! Nel nostro Dockerfile, lo abbiamo prima inserito in una cartella temporanea come questa: echo "<settings> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Quindi, eseguiamo maven con l'opzione "-s" e passiamo il percorso al file delle impostazioni come questo "mvn -s /tmp/maven-settings.xml clean". Spero che sia d'aiuto!
Oscar Drai,

@ han-van-pham lo trovi in ​​$ HOME / .m2 /. In caso contrario, crearlo lì.
dr0i

4

Usando Ubuntu 16.04, java 1.8.0_201.

Ho disinstallato vecchio maven e installato Maven 3.6.3, ho ancora questo errore che le dipendenze Maven non riescono con un errore 501.

Realizzato potrebbe essere un problema truststore / keystore associato con la richiesta di https. Abbiamo scoperto che ora puoi configurare le opzioni -Djavax usando un file jvm.config, vedi: https://maven.apache.org/configure.html .

Mentre sto usando anche Tomcat ho copiato il keystore e la configurazione del truststore da Tomcat (setenv.sh) sul mio jvm.config e poi ha funzionato!

C'è anche un'opzione per passare questa configurazione in 'export MAVEN_OPTS' (quando si utilizza mvn generate) ma sebbene questo abbia fermato l'errore 501 ne ha creato un altro: si aspettava un file pom.

La creazione di un file jvm.config separato funziona perfettamente, basta inserirlo nella radice del progetto.

Spero che questo aiuti qualcuno, mi ha preso tutto il giorno per capirlo!


4

Lo stesso problema si verifica anche per jcenter .

Dal 13 gennaio 2020, Jcenter è disponibile solo su HTTPS.

I progetti che ottengono le loro dipendenze usando lo stesso inizieranno ad affrontare problemi. Per le soluzioni rapide, procedi come segue in build.gradle

invece di

repositories {
jcenter ()
//others
}

Usa questo:

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

4

L'errore:

Trasferimento file non riuscito: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .

Il codice di ritorno è: 501, ReasonPhrase: HTTPS richiesto.

Analisi della causa principale:

Maven central si aspetta che i client utilizzino https, ma il client sta eseguendo solo una semplice richiesta HTTP.

Pertanto, la richiesta di download del pacchetto denominato "wagon-ssh-2.1.pom" non è riuscita.

Come risolvere il problema?

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

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

nel file pom.xml o nel file build.gradle del progetto.


2
dove
posso

3

Condividendolo nel caso qualcuno ne abbia bisogno:

Old Gradle config (senza Gitlab, distribuzioni Docker, per progetti semplici)

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

Nuova configurazione:

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

Notare l'https. Buona programmazione :)


3

Il mio ambiente attuale non supporta HTTPS, quindi l'aggiunta della versione non sicura del repository ha risolto il mio problema: http://insecure.repo1.maven.org secondo Sonatype

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

-3

Aggiungi il seguente repository in 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>

Questo causerà lo stesso problema perché sta usandohttp
Yudhistira Arya, il

1
L'ho provato a Pom e funziona
Sathesh il

ci ho provato anche io e lavoro x2
Javier J Solis Flores il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.