Zależności Maven zawodzą z błędem 501


154

Ostatnio zadania kompilacji Maven działające w Jenkins kończą się niepowodzeniem, z poniższym wyjątkiem, że nie mogą pobrać zależności z Maven Central i powinny używać HTTPS . Nie jestem pewien, jak zmienić żądania z HTTP na HTTPS . Czy ktoś może mnie poprowadzić w tej sprawie?

[BŁĄD] Nie można rozwiązać rozszerzenia kompilacji:
wtyczki org.apache.maven.wagon:wagon-ssh:2.1lub jednej z jej zależności nie można rozwiązać:
nie można zebrać zależności dla org.apache.maven.wagon:wagon-ssh:jar:2.1 ():
nie można odczytać deskryptora artefaktu dla org.apache.maven.wagon:wagon-ssh:jar:2.1:
nie można przenieść artefaktu org.apache.maven.wagon:wagon-ssh:pom:2.1z / do centralnej ( http: //repo.maven.apache. org / maven2 ):
Nie udało się przesłać pliku: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
Kod powrotu to:501, ReasonPhrase:HTTPS Required. -> [Help 2]

Oczekiwanie na zakończenie przez Jenkins zbierania data[ERROR]
wtyczki org.apache.maven.plugins:maven-clean-plugin:2.4.1lub jednej z jej zależności nie można rozwiązać:
Nie można odczytać deskryptora artefaktu dla org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
Nie można przenieść artefaktu org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1z / do centrali ( http://repo.maven.apache.org/maven2 ):
Nie udało się przenieś plik: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
Kod powrotu to:501 , ReasonPhrase:HTTPS Required. -> [Help 1]


5
Używasz adresu repo.maven.apache.org/maven2, aby połączyć się z centralą maven, zamiast tego użyj repo.maven.apache.org/maven2, tj. Użyj połączenia https
Manjunath HM

2
sprawdź settings.xmlw jenkinsie centralny adres URL maven
varontron

Cześć Manjunath, mam ten sam problem. Czy wiesz, jak zmusić maven do używania HTTPS zamiast HTTP
Lahiru Madushanka

@Lahiru Madushanka przegląda linki, więc otrzymujesz odpowiedź na swoje pytanie stackoverflow.com/questions/25393298/...
Manjunath HM

1
Zmieniłem wersję maven na 3.6.3 i nadal wyświetla ten sam błąd
dhS

Odpowiedzi:


129

Przyczynę zaobserwowanego błędu wyjaśniono w Wymaganie centralne 501 HTTPS

Z dniem 15 stycznia 2020 r. Centralne repozytorium nie obsługuje już niezabezpieczonej komunikacji przez zwykły HTTP i wymaga, aby wszystkie żądania do repozytorium były szyfrowane przez HTTPS.

Wygląda na to, że najnowsze wersje Maven (wypróbowane z 3.6.0, 3.6.1) domyślnie korzystają już z adresu URL HTTPS.

Oto daty zmiany głównych repozytoriów:

Twoje kompilacje Java mogą ulec awarii od 13 stycznia (jeśli nie przełączyłeś jeszcze dostępu do repozytorium na HTTPS)

Aktualizacja: Wygląda na to, że z maven 3.2.3 maven central jest dostępny za pośrednictwem HTTPS Patrz https://stackoverflow.com/a/25411658/5820670

Dziennik zmian Maven ( http://maven.apache.org/docs/3.2.3/release-notes.html )


26
Cześć! Jestem oryginalnym badaczem, który zainicjował tę branżową inicjatywę. Mój post na blogu o ważnych datach również tutaj: medium.com/@jonathan.leitschuh/…
Jonathan Leitschuh

1
@JonathanLeitschuh proszę napisać pełną odpowiedź, na którą można głosować i zaakceptować ...
Thorbjørn Ravn Andersen

1
Używam maven 3.6.0 na Ubuntu 18.04, ale wydaje się, że nie używa adresu URL https.
Ashutosh

@Ashutosh: to samo z Maven 3.6.1 na Ubuntu 19.10. Nie jestem pewien, dlaczego tak jest, może to być łatka Ubuntu, ale dlaczego mieliby to zrobić?). Aby rozwiązać ten problem, skorzystaj z jednej z poniższych odpowiedzi, które aktualizują settings.xmlplik (i głosuj na nie, proszę, ponieważ jest to prawidłowe rozwiązanie, inne niż użycie łatanego Maven).
Guss

Tak więc, wyraźnie skonfigurowałem settings.xmlużywanie repozytoriów HTTPS .. które mogą, wgetale z jakiegoś bardzo dziwnego powodu mvn archetype:generate -X(aby tylko sprawdzić, czy zależności można pobrać) nadal drukuje, że ma dostęp do Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom jakiejkolwiek pomocy, proszę ...?
Giorgi Tsiklauri

61

Mam ten sam problem. Próbowałem dwóch rozwiązań i oba działają dla mnie dobrze.

  • Zaktualizuj repozytorium wersji Maven (wersja Maven> = 3.2.3)
  • Ogranicz bieżącą wersję Maven, aby korzystać z łączy HTTPS.

Zaktualizuj repozytorium wersji Maven:

Pobierz plik binarny Apache Maven, który zawiera domyślne adresy https ( plik binarny Apache Maven 3.6.3 ). I otwórz okno dialogowe Opcje w narzędziach paska menu NetBeans ( Widok okna dialogowego Java Maven ). I wybierz opcję przeglądania w polu listy domowej Maven (widok skrzynki domowej Maven ). Po dodaniu nowo pobranej wersji Apache Maven ( zaktualizowany widok pola listy głównej Maven ), projekt buduje się i działa pomyślnie.

Ogranicz bieżącą wersję Maven, aby korzystać z łączy HTTPS:

Dołącz następujący kod do pom.xml swojego projektu.

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

Miałem centralne repozytorium, ale nie centralne repozytorium wtyczek. To naprawiło to dla mnie.
ponder275

1
Ogranicz bieżącą wersję Maven do korzystania z linków HTTPS: działało dla mnie.
Mohammad Anas,

W moim przypadku brakowało mi części <pluginRepository> i otrzymywałem błędy podczas korzystania z archetypów, ponieważ domyślnie był to http dla wtyczek.
user1708042

To również naprawiło to dla mnie, ale otrzymałem kolejny błąd „Otrzymałem fatalny alert: protokół_wersja” i musiałem przełączyć się na java 8, aby to naprawić, na wypadek, gdyby ktoś natknął się na ten sam problem.
Kim Tang,

Cieszę się, że przyczyniłem się do zerwania remisu. Ta odpowiedź rozwiązała podobny problem, z którym się spotkałem.
Brian Risk

36

Z dniem 15 stycznia 2020 r. Centralne repozytorium nie obsługuje już niepewnej komunikacji przez zwykły HTTP i wymaga szyfrowania wszystkich żądań do repozytorium HTTPS .

Jeśli pojawia się ten błąd, musisz zastąpić wszystkie odwołania URL do Maven Central ich kanonicznymi odpowiednikami HTTPS.

( źródło )

Wprowadziliśmy następujące zmiany w build.gradle mojego projektu:

Stary:

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

Nowy:

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

Tak, mam zamianę w pliku setting.xml, ale niestety nadal nie działa. Czy mam rację, czy trzeba zmienić jakiś plik?
Sumeet Vishwas

@SumeetVishwas Czy możesz udostępnić przykładowy plik settings.xml?
Arunan Sugunakumar

3
@ArunanSugunakumar Nie zmieniłem w pliku settings.xml. Wszystko, co musisz zmienić w POM. zaktualizuj centralne repozytorium maven. Próbkę centralnego repozytorium umieściłem w wątku odpowiedzi. proszę znaleźć poniżej
Sumeet Vishwas

1
Pytanie OP mówi: „Nie jestem pewien, jak zmienić żądania z HTTP na HTTPS”. Ta odpowiedź nie dotyczy pytania.
wchargin

28

Spróbuj trafić poniższy adres URL w dowolnej przeglądarce. Zwróci 501

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

Spróbuj z https. Pobiera plik pom.xml:

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

Dodaj go ( https://repo.maven.apache.org/maven2 ) w pliku 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
Czy możesz podać przykład pełnego pliku setting.xml, ponieważ próbowałem bezskutecznie dodać powyższe do pliku?
Jhertz

Znalazłem tę odpowiedź, która sprawiła, że ​​lokalizacja w pliku jest jaśniejsza, teraz działa: stackoverflow.com/a/59784045/3120576
jhertz

22

Zaktualizuj centralne repozytorium Maven i użyj https zamiast 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>

Próbowałem tego w Pom i działało to dobrze: <repositories> <repository> <id> centralne repozytorium https </id> <nazwa> Centralne repozytorium Https </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repositories>.
lam

1
Dzięki. Działa to w Ubuntu 18.10, używając Netbeans. Musiałem ustawić Maven w domu do najnowszej wersji Maven w Netbeans. Gdzie znalazłeś to rozwiązanie?
Sanal S

Konieczne może być również zaktualizowanie repozytorium wtyczek. Przynajmniej musiałem to zrobić również dla mnie, aby to naprawić.
Kim Tang,

16

Korzystałem z czystej instalacji Maven / Java na kontenerze Docker.

Dla mnie musiałem tam cd $M2_HOME/confedytować settings.xmlplik. Dodaj następujący blok do środka<mirrors>...</mirrors>

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

Czy możesz podać swój plik Docker? Mam ten sam problem, ale nie wiem, jak to naprawić!
Han Van Pham

@ HanVanPham Zaktualizowałem mój maven do najnowszej wersji, naprawiono problem z http.
mehulmpt

Dla mnie również adaptacja centralnie bezpiecznego bloku w lokalnym pliku settings.xml ($ HOME / .m2 / settings.xml) działała idealnie.
t3az0r


12

Maven przechodzi na HTTPS i wyłącza dostęp HTTP

Krótka historia, od 15 stycznia 2020 r. Repozytorium Maven Central nie obsługuje już połączeń HTTP (inne repozytoria robią to samo). Dlatego wskażesz ustawienia Maven / Gradle, aby używać adresu URL HTTPS.

Rozwiązanie:

Możesz wybrać jedno z trzech poniższych podejść.

  1. Dodaj repozytorium do pom.xmlpliku swojego projektu

    <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. Dodaj repozytorium do profilu w settings.xmlpliku.

    <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. Zaktualizuj swoją wersję maven do nowej, która domyślnie używa wartości https. Ostatni w tej chwili 3.6.3 Pobierz tutaj

Dla Gradle:

Zamień tylko adres URL wersji HTTPS.

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

Aby zaktualizować (3.3.9 do 3.6.3), najpierw musisz całkowicie odinstalować starszą wersję? Lub po prostu zainstaluj najnowszą wersję?
BigRedEO

1
@BigRedEO Możesz mieć więcej niż jedną wersję maven w swoim środowisku. Jednak twoje $M2_HOMElub twoje $PATH zmienne env będą wskazywały tylko na jedną z nich, która będzie twoją domyślną wersją maven. Wolę odinstalować starszą przed zainstalowaniem nowszej. Ale to zależy od twoich potrzeb.
Adam M. Gamboa G.

10

Dodałem następujący fragment kodu do pliku setting.xml i to rozwiązało problem,

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

9

Mam ten sam problem, ale używam GitLab zamiast Jenkins. Kroki, które musiałem zrobić, aby rozwiązać problem:

  1. Mój projekt jest w GitLab, więc używa pliku .yml, który wskazuje na obraz Dockera, muszę wykonać ciągłą integrację, a obraz, którego używa, ma adresy URL http: // maven . Więc zmieniłem to na https: // maven .
  2. Ten sam obraz Dockerfile miał starszą wersję Maven 3.0.1, która dawała mi problemy tylko z dnia na dzień. Zaktualizowałem plik Docker, aby uzyskać najnowszą wersję 3.6.3
  3. Następnie wdrożyłem ten obraz w moim repozytorium online i zaktualizowałem plik ml projektu Maven, aby użyć tego nowego obrazu.
  4. Na koniec zaktualizowałem plik POM moich głównych projektów, aby odwoływał się do https: // maven ... zamiast http: // maven

Zdaję sobie sprawę, że jest to bardziej specyficzne dla mojej konfiguracji. Ale bez wykonania wszystkich powyższych kroków nadal otrzymywałbym ten komunikat o błędzie Return code is: 501 , ReasonPhrase:HTTPS Required


Czy możesz podać swój plik Docker?
Han Van Pham

8

Jak stwierdzono w innych odpowiedziach, https jest teraz wymagane do wysyłania żądań do Maven Central, podczas gdy starsze wersje Maven używają http .

Jeśli nie chcesz / nie możesz zaktualizować do wersji Maven 3.2.3+, możesz to obejść, dodając następujący kod do MAVEN_HOME \ conf \ settings.xml w <profiles>sekcji:

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

Będzie to zawsze aktywne ustawienie, chyba że w razie potrzeby wyłączysz / zastąpisz je w POM.


7

Dla wszystkich koderów korporacyjnych, najlepiej, jeśli pojawi się ten błąd, oznacza to, że twoja baza kodu jest wciąż budowana ze społeczności open source. Musisz przejechać „centralne” repozytorium z własnym menedżerem repozytorium firmy Maven.

Możesz przejść do pliku settings.xml i zastąpić adres URL centralnego repozytorium z http: // na https: //

<M2_HOME>/conf/settings.xml

Znajdź sekcje mirrorów i dodaj następujący wpis:

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

W sekcji URL, jeśli korzystasz z http://repo1.maven.org/maven2/ lub http://repo.maven.apache.org/maven2/ następnie

Wymienić http://repo1.maven.org/maven2/ z https://repo1.maven.org/maven2/

Wymienić http://repo.maven.apache.org/maven2/ z https://repo.maven.apache.org/maven2/

Najlepiej jest tutaj użyć adresu URL zarządzania / repozytorium kontroli firmy. Ponieważ zablokuje to każdy kontakt ze społecznością repozytoriów Maven typu open source.

Jak wspomniano w innych odpowiedziach, obowiązujące od 15 stycznia 2020 r., Centralne repozytorium Maven nie obsługuje niepewnej komunikacji przez zwykły HTTP.


Po dodaniu kopii lustrzanej w sekcji kopii lustrzanych mam błąd, że peer nie jest uwierzytelniony. Co mam teraz zrobić? Dzięki!
dimson

@dimson Oznacza to, że próbowałeś połączyć się z https, ale brakowało certyfikatu do uwierzytelnienia, prawdopodobnie z powodu jego braku w Javie. Zaimportuj certyfikat z repozytorium do magazynu kluczy Java lub zaktualizuj java.
tibortru

@tibortru Thanx Man, już rozwiązał problem. Dodałem te właściwości do maven w IDE: maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https. protokoły = TLSv1, TLSv1.1, TLSv1.2. Potem wszystko działa dobrze.
dimson

Tak, cóż, to w drugą stronę.
Niezabezpieczony

7

Dla mnie (programista korporacyjny) również dodanie repozytorium lustrzanego w settings.xmlnaprawionym problemie. Używam również Maven wewnątrz kontenera dokerów.

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

Czy możesz mi pokazać, gdzie możemy znaleźć plik settings.xml, @Oscar?
Han Van Pham

Pewnie! W naszym pliku Docker najpierw umieszczamy go w folderze tymczasowym, takim jak ten: echo "<ustawienia> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Następnie uruchamiamy maven z opcją „-s” i przekazujemy ścieżkę do pliku ustawień takiego jak ten „mvn -s /tmp/maven-settings.xml clean”. Mam nadzieję, że to pomoże!
Oscar Drai

@ Han-van-Pham znajdziesz go w $ HOME / .m2 /. Jeśli nie, utwórz go tam.
dr0i

4

Korzystanie z Ubuntu 16.04, java 1.8.0_201.

Odinstalowałem stary maven i zainstalowałem Maven 3.6.3, nadal mam ten błąd, że zależności Maven zawodzą z błędem 501.

Uświadomił sobie, że może to być problem z zaufaniem / magazynem kluczy związany z wymaganiem https. Stwierdzono, że można teraz skonfigurować opcje -Djavax przy użyciu pliku jvm.config, patrz: https://maven.apache.org/configure.html .

Ponieważ używam również Tomcat, skopiowałem konfigurację magazynu kluczy i magazynu zaufanych certyfikatów z Tomcat (setenv.sh) do mojego pliku jvm.config, a następnie zadziałało!

Istnieje również opcja przekazania tej konfiguracji w 'export MAVEN_OPTS' (przy użyciu generowania mvn), ale chociaż zatrzymało to błąd 501, stworzyło ono inny: oczekiwał pliku pom.

Utworzenie osobnego pliku jvm.config działa idealnie, wystarczy umieścić go w katalogu głównym projektu.

Mam nadzieję, że to komuś pomaga, zajęło mi cały dzień, aby to rozgryźć!


4

Ten sam problem występuje również w przypadku jcenter .

Od 13 stycznia 2020 r. Jcenter jest dostępny tylko w HTTPS.

Projekty korzystające z tych samych zależności zaczną napotykać problemy. Aby uzyskać szybkie poprawki, wykonaj następujące czynności w swoim build.gradle

zamiast

repositories {
jcenter ()
//others
}

Użyj tego:

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

4

Błąd:

Nie udało się przesłać pliku: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .

Kod powrotu to: 501, Powód Hasło: Wymagany HTTPS.

Analiza przyczyn:

Maven Central oczekuje, że klienci używają protokołu https, ale klient wysyła tylko zwykłe żądania HTTP.

Dlatego żądanie pobrania pakietu o nazwie „wagon-ssh-2.1.pom” nie powiodło się.

Jak rozwiązać problem?

Zamień adres URL „ http://repo.maven.apache.org/maven2

z „ https://repo.maven.apache.org/maven2

w pliku pom.xml lub pliku build.gradle projektu.


2
gdzie mam zastąpić ten adres
dhS

3

Udostępnianie tego, jeśli ktoś tego potrzebuje:

Konfiguracja Old Gradle (bez Gitlab, wdrożenia Docker, dla prostych projektów)

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

Nowa konfiguracja:

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

Zwróć uwagę na https. Miłego kodowania :)


3

Moje obecne środowisko nie obsługuje HTTPS, więc dodanie niezabezpieczonej wersji repozytorium rozwiązało mój problem: http://insecure.repo1.maven.org zgodnie z Sonatype

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

-3

Dodaj następujące repozytorium w 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>

Spowoduje to ten sam problem, ponieważ używahttp
Yudhistira Arya

1
Próbowałem tego w Pom i działa
Sathesh

też próbowałem i działa x2
Javier J Solis Flores
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.