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.