Ketergantungan maven gagal dengan kesalahan 501


154

Baru-baru ini Maven membangun pekerjaan yang berjalan di Jenkins gagal dengan pengecualian di bawah ini mengatakan bahwa mereka tidak dapat menarik dependensi dari Maven Central dan harus menggunakan HTTPS . Saya tidak yakin bagaimana mengubah permintaan dari HTTP ke HTTPS . Bisakah seseorang membimbing saya tentang masalah ini?

[GALAT] Ekstensi bangunan yang tidak dapat diselesaikan :
Plugin org.apache.maven.wagon:wagon-ssh:2.1atau salah satu dependensinya tidak dapat diselesaikan:
Gagal mengumpulkan dependensi untuk org.apache.maven.wagon:wagon-ssh:jar:2.1 ():
Gagal membaca keterangan artefak untuk org.apache.maven.wagon:wagon-ssh:jar:2.1:
Tidak dapat mentransfer artefak org.apache.maven.wagon:wagon-ssh:pom:2.1dari / ke pusat ( http: //repo.maven.apache. org / maven2 ):
Gagal mentransfer file: http://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-ssh/2.1/wagon-ssh-2.1.pom .
Kode pengembalian adalah:501, ReasonPhrase:HTTPS Required. -> [Help 2]

Menunggu Jenkins menyelesaikan pengumpulan data[ERROR]
Plugin org.apache.maven.plugins:maven-clean-plugin:2.4.1atau salah satu dependensinya tidak dapat diatasi:
Gagal membaca keterangan artefak untuk org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1:
Tidak dapat mentransfer artefak org.apache.maven.plugins:maven-clean-plugin:pom:2.4.1dari / ke pusat ( http://repo.maven.apache.org/maven2 ):
Gagal transfer file: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom .
Kode pengembalian adalah:501 , ReasonPhrase:HTTPS Required. -> [Help 1]


5
Anda menggunakan url repo.maven.apache.org/maven2 untuk terhubung ke pusat maven, sebagai gantinya gunakan repo.maven.apache.org/maven2 yaitu menggunakan koneksi https
Manjunath HM

2
periksa settings.xmljenkins Anda untuk url pusat maven
varontron

Hai Manjunath, saya memiliki masalah yang sama. Apakah Anda tahu cara memaksa pakar menggunakan HTTPS alih-alih HTTP
Lahiru Madushanka

@Lahiru Madushanka melalui tautan, sehingga Anda mendapatkan jawaban untuk pertanyaan Anda stackoverflow.com/questions/25393298/…
Manjunath HM

1
Saya telah mengubah versi pakar ke 3.6.3 dan masih menunjukkan kesalahan yang sama
dhS

Jawaban:


130

Alasan untuk kesalahan yang diamati dijelaskan dalam Central 501 HTTPS Required

Efektif 15 Januari 2020, Central Repository tidak lagi mendukung komunikasi tidak aman melalui HTTP biasa dan mengharuskan semua permintaan ke repositori dienkripsi melalui HTTPS.

Sepertinya versi terbaru dari Maven (dicoba dengan 3.6.0, 3.6.1) sudah menggunakan URL HTTPS secara default.

Berikut adalah tanggal ketika repositori besar akan berganti:

Bangunan Java Anda mungkin rusak mulai 13 Januari (jika Anda belum beralih akses repo ke HTTPS)

Pembaruan: Sepertinya dari maven 3.2.3 maven pusat diakses melalui HTTPS Lihat https://stackoverflow.com/a/25411658/5820670

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


26
Hai! Saya adalah peneliti asli yang memulai inisiatif industri yang luas ini. Anda dapat menemukan posting blog saya tentang tanggal-tanggal penting di sini juga: medium.com/@jonathan.leitschuh/…
Jonathan Leitschuh

1
@JonathanLeitschuh tolong tulis jawaban lengkap yang dapat dipilih dan diterima ...
Thorbjørn Ravn Andersen

1
Saya menggunakan maven 3.6.0 di Ubuntu 18.04 tetapi sepertinya tidak menggunakan https url.
Ashutosh

@Ashutosh: hal yang sama di sana dengan Maven 3.6.1 di Ubuntu 19.10. Saya tidak yakin mengapa ini terjadi, ini bisa menjadi tambalan Ubuntu, tetapi mengapa mereka melakukan itu?). Untuk mengatasi ini, gunakan salah satu jawaban di bawah ini yang memperbarui settings.xmlfile (dan upvote, tolong, karena ini adalah solusi yang benar, selain menggunakan Maven yang ditambal).
Guss

Jadi, saya secara eksplisit telah mengkonfigurasi settings.xmluntuk menggunakan repositori HTTPS .. yang dapat, dengan wget, tetapi untuk beberapa alasan yang sangat aneh, mvn archetype:generate -X(untuk hanya menguji apakah dependensi dapat diunduh) masih mencetaknya mengakses untuk Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom bantuan, tolong ..?
Giorgi Tsiklauri

62

Saya menghadapi masalah yang sama. Ada dua solusi yang saya coba, dan keduanya bekerja dengan baik untuk saya.

  • Perbarui repositori versi Maven (Versi Maven> = 3.2.3)
  • Batasi versi Maven saat ini untuk menggunakan tautan HTTPS.

Perbarui repositori versi Maven:

Unduh biner Apache Maven yang menyertakan alamat https default ( biner Apache Maven 3.6.3 ). Dan buka jendela dialog Opsi di alat bilah menu NetBeans ( Tampilan Dialog Java Maven ). Dan pilih opsi browse di Maven Home List Box ( Maven Home List Box View ). Setelah menambahkan Apache Maven versi yang baru diunduh ( Diperbarui Maven Home List Box View ), proyek membangun dan berjalan dengan sukses.

Batasi versi Maven saat ini untuk menggunakan tautan HTTPS:

Sertakan kode berikut dalam pom.xml proyek Anda.

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

Saya memiliki repositori pusat tetapi tidak repositori plugin sentral. Itu memperbaikinya bagi saya.
ponder275

1
Batasi versi Maven saat ini untuk menggunakan tautan HTTPS: berfungsi untuk saya.
Mohammad Anas

Dalam kasus saya, saya melewatkan bagian <pluginRepository> dan saya mendapatkan kesalahan saat menggunakan arketipe karena defaultnya adalah http untuk plugin.
user1708042

Ini juga memperbaikinya untuk saya tetapi saya menerima kesalahan lain "Menerima peringatan fatal: protocol_version" dan harus beralih ke java 8 untuk memperbaikinya, jika ada orang yang menemukan masalah yang sama.
Kim Tang

Saya senang telah memberikan kontribusi upvote yang melanggar dasi. Jawaban ini membahas masalah serupa yang saya alami.
Brian Risk

36

Efektif 15 Januari 2020, Central Repository tidak lagi mendukung komunikasi tidak aman melalui HTTP biasa dan mengharuskan semua permintaan ke repositori dienkripsi melalui HTTPS .

Jika Anda menerima kesalahan ini, maka Anda perlu mengganti semua referensi URL ke Maven Central dengan rekan-rekan HTTPS kanonik mereka.

( sumber )

Kami telah membuat perubahan berikut di build.gradle proyek saya:

Tua:

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

Baru:

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

Ya saya telah mengganti dalam file setting.xml tapi sayangnya itu masih tidak berfungsi. Apakah saya melakukan hal yang benar atau ada file lain yang perlu diubah?
Sumeet Vish adalah

@SumeetVishDapatkah Anda membagikan file sample settings.xml?
Arunan Sugunakumar

3
@ArunanSugunakumar saya tidak mengubah pengaturan.xml. Yang perlu Anda ubah di POM. perbarui repositori pusat maven. Saya menempatkan sampel repositori pusat di utas jawaban. silakan temukan di bawah ini
Sumeet Vishwas

1
Pertanyaan OP mengatakan, "Saya tidak yakin bagaimana mengubah permintaan dari HTTP ke HTTPS." Jawaban ini tidak menjawab pertanyaan.
wchargin

28

Cobalah untuk menekan URL di bawah ini di browser apa pun. Ini akan mengembalikan 501

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

Silakan coba dengan https. Ini akan mengunduh file pom.xml:

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

Silakan tambahkan ( https://repo.maven.apache.org/maven2 ) dalam 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
Bisakah Anda memberikan contoh setting.xml penuh karena saya tidak berhasil mencoba menambahkan di atas ke dalam file?
jhertz

Menemukan jawaban ini yang membuat lokasi dalam file lebih jelas, sekarang berfungsi: stackoverflow.com/a/59784045/3120576
jhertz

22

Perbarui penyimpanan pusat Maven dan gunakan https alih-alih 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>

Saya mencoba ini di Pom dan itu bekerja dengan baik: <repositori> <repositori> <id> repo sentral https </id> <name> Pusat Repositori Https </name> <url> repo.maven.apache.org/maven2</ url > </repository> </repository>.
lam

1
Terima kasih. Ini berfungsi di ubuntu 18.10, menggunakan Netbeans. Harus mengatur rumah Maven ke versi Maven terbaru di Netbeans. Di mana Anda menemukan solusi ini?
Sanal S

Anda mungkin harus memperbarui repositori plugin juga. Setidaknya itu harus dilakukan untukku juga, agar bisa diperbaiki.
Kim Tang

16

Saya menggunakan instalasi bersih Maven / Java pada wadah Docker.

Bagi saya, saya harus cd $M2_HOME/confmengedit settings.xmlfile di sana. Tambahkan blok berikut di dalam<mirrors>...</mirrors>

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

Bisakah Anda membagikan Dockerfile Anda? Saya mendapat masalah yang sama tetapi saya tidak tahu bagaimana cara memperbaikinya!
Han Van Pham

@HanVanPham Saya memperbarui pakar saya ke versi terbaru, memiliki masalah http ini diperbaiki.
mehulmpt

Bagi saya juga adaptasi dari blok central-secure di file local settings.xml ($ HOME / .m2 / settings.xml) berhasil dengan sempurna.
t3az0r


12

Maven pindah ke HTTPS dan menonaktifkan akses HTTP

Singkatnya, mulai 15 Januari 2020, repositori Maven Central tidak lagi mendukung koneksi HTTP (repositori lain juga melakukan hal yang sama). Oleh karena itu, Anda akan menunjukkan pengaturan Maven / Gradle Anda untuk menggunakan URL HTTPS.

Larutan:

Anda dapat memilih salah satu dari tiga pendekatan berikut.

  1. Tambahkan repositori di pom.xmlfile proyek Anda

    <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. Tambahkan repositori ke dalam profil di 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. Perbarui versi pakar ke versi baru yang menggunakan nilai https sebagai default. Yang terbaru saat ini 3.6.3 Unduh di sini

Untuk Gradle:

Hanya ganti URL untuk versi HTTPS.

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

Untuk meningkatkan (3.3.9 ke 3.6.3) apakah Anda perlu menghapus instalasi versi yang lebih lama terlebih dahulu? Atau cukup instal versi terbaru?
BigRedEO

1
@BigRedEO Anda dapat memiliki lebih dari satu versi pakar di lingkungan Anda. Namun, variabel env $M2_HOMEAnda atau Anda $PATH hanya akan menunjuk ke salah satunya, yang akan menjadi versi pakar default Anda. Saya lebih memilih untuk menghapus yang lebih lama sebelum menginstal yang lebih baru. Tapi, itu tergantung kebutuhan Anda.
Adam M. Gamboa G.

10

Saya telah menambahkan segmen kode berikut ke setting.xml dan itu mengatasi masalah,

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

9

Saya memiliki masalah yang sama, tetapi saya menggunakan GitLab bukan Jenkins. Langkah-langkah yang harus saya lakukan untuk mengatasi masalah ini:

  1. Proyek saya ada di GitLab sehingga ia menggunakan file .yml yang mengarah ke gambar Docker yang harus saya lakukan integrasi terus-menerus, dan gambar yang digunakan memiliki URL http: // maven . Jadi saya mengubahnya menjadi https: // maven .
  2. Gambar Dockerfile yang sama memiliki versi Maven 3.0.1 yang lebih lama yang memberi saya masalah hanya dalam semalam. Saya memperbarui Dockerfile untuk mendapatkan versi terbaru 3.6.3
  3. Saya kemudian menyebarkan gambar itu ke repositori online saya, dan memperbarui proyek Maven saya ymlfile untuk menggunakan gambar baru itu.
  4. Dan terakhir, saya memperbarui file POM proyek utama saya ke referensi https: // maven ... bukan http: // maven

Saya menyadari bahwa ini lebih spesifik untuk pengaturan saya. Tetapi tanpa melakukan semua langkah di atas saya masih akan terus mendapatkan pesan kesalahan ini Return code is: 501 , ReasonPhrase:HTTPS Required


Bisakah Anda membagikan Dockerfile Anda?
Han Van Pham

8

Seperti yang dinyatakan dalam jawaban lain, https sekarang diperlukan untuk membuat permintaan ke Maven Central, sementara versi Maven yang lebih lama menggunakan http .

Jika Anda tidak ingin / tidak bisa memutakhirkan ke Maven 3.2.3+, Anda dapat melakukan solusi dengan menambahkan kode berikut ke MAVEN_HOME \ conf \ settings.xml ke dalam<profiles> bagian:

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

Ini akan selalu menjadi pengaturan aktif kecuali jika Anda menonaktifkan / menimpanya di POM Anda saat diperlukan.


7

Untuk semua coders perusahaan, idealnya, jika Anda mendapatkan kesalahan ini, itu berarti bahwa basis kode Anda masih dibangun dari komunitas open-source. Anda perlu menumpang repositori "sentral" bersama manajer repositori Maven perusahaan in-house Anda.

Anda dapat pergi ke settings.xml Anda dan mengganti URL repositori pusat Anda dari http: // ke https: //

<M2_HOME>/conf/settings.xml

Temukan bagian mirror dan tambahkan entri berikut:

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

Di bagian URL, jika Anda menggunakan http://repo1.maven.org/maven2/ atau http://repo.maven.apache.org/maven2/ maka

Ganti http://repo1.maven.org/maven2/ dengan https://repo1.maven.org/maven2/

Ganti http://repo.maven.apache.org/maven2/ dengan https://repo.maven.apache.org/maven2/

Anda perlu menggunakan URL manajemen / repositori kontrol sumber perusahaan Anda di sini. Karena ini akan memblokir kontak dengan komunitas repositori open source Maven.

Seperti disebutkan dalam jawaban lain, efektif mulai 15 Januari 2020, repositori Maven pusat tidak mendukung komunikasi tidak aman melalui HTTP biasa.


Setelah menambahkan bagian mirror di mirror saya ada kesalahan, peer itu tidak diautentikasi. Apa yang harus saya lakukan sekarang? Terima kasih!
dimson

@dimson Ini berarti Anda mencoba terhubung dengan https tetapi Anda kehilangan sertifikat untuk otentikasi, mungkin karena Java tidak memilikinya. Impor sertifikat dari repositori ke java keystore, atau tingkatkan java.
Tibortru

@tibortru Thanx Man, sudah memecahkan masalah. Saya telah menambahkan properti ini ke maven di IDE: maven.wagon.http.ssl.insecure = true maven.wagon.http.ssl.allowall = true maven.wagon.http.ssl.ignore.validity.dates = true https. protokol = TLSv1, TLSv1.1, TLSv1.2. Setelah itu semua bekerja dengan baik.
dimson

Kamu, baik itu sebaliknya. Yang tidak aman :)
tibortru

7

Bagi saya (corporate coder) juga menambahkan repositori mirror dalam settings.xmlmemperbaiki masalah. Saya juga menggunakan Maven di dalam wadah buruh pelabuhan.

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

Bisakah Anda menunjukkan kepada saya di mana kita dapat menemukan file settings.xml, @Oscar?
Han Van Pham

Tentu! Di Dockerfile kami, pertama-tama kami meletakkannya di folder temp seperti ini: echo "<settings> <mirrors> .... </mirrors> </settings>"> /tmp/maven-settings.xml. Kemudian, kita menjalankan maven dengan opsi "-s" dan meneruskan path ke file pengaturan seperti ini "mvn -s /tmp/maven-settings.xml clean". Semoga ini bisa membantu!
Oscar Drai

@ han-van-pham Anda menemukannya di $ HOME / .m2 /. Jika tidak, buat di sana.
dr0i

4

Menggunakan Ubuntu 16.04, java 1.8.0_201.

Saya un-instal maven lama dan menginstal Maven 3.6.3, masih mendapat kesalahan ini bahwa dependensi Maven gagal dengan kesalahan 501.

Menyadari itu bisa menjadi masalah truststore / keystore yang terkait dengan memerlukan https. Ditemukan bahwa Anda sekarang dapat mengkonfigurasi opsi -Djavax menggunakan file jvm.config, lihat: https://maven.apache.org/configure.html .

Karena saya juga menggunakan Tomcat, saya menyalin konfigurasi keystore & truststore dari Tomcat (setenv.sh) ke jvm.config saya dan kemudian berhasil!

Ada juga opsi untuk meneruskan konfigurasi ini di 'ekspor MAVEN_OPTS' (ketika menggunakan mvn menghasilkan) tetapi meskipun ini menghentikan kesalahan 501 itu menciptakan yang lain: itu diharapkan file pom.

Membuat file jvm.config terpisah berfungsi dengan baik, cukup taruh di root proyek Anda.

Semoga ini bisa membantu seseorang, butuh waktu seharian untuk mencari tahu!


4

Masalah yang sama juga terjadi untuk jcenter .

Mulai 13 Januari 2020 dan seterusnya, Jcenter hanya tersedia di HTTPS.

Proyek mendapatkan dependensi mereka menggunakan hal yang sama akan mulai menghadapi masalah. Untuk perbaikan cepat lakukan hal berikut di build.gradle Anda

dari pada

repositories {
jcenter ()
//others
}

Gunakan ini:

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

4

Kesalahan:

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

Kode pengembalian adalah: 501, ReasonPhrase: Diperlukan HTTPS.

Analisis akar penyebab:

Maven pusat mengharapkan klien menggunakan https, tetapi klien hanya membuat permintaan HTTP saja.

Karenanya, permintaan untuk mengunduh paket bernama 'wagon-ssh-2.1.pom' telah gagal.

Bagaimana cara mengatasi masalah?

Ganti URL " http://repo.maven.apache.org/maven2 "

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

dalam file pom.xml atau file build.gradle dari proyek.


2
di mana saya mengganti url ini
dhS

3

Membagikan ini jika ada yang membutuhkannya:

Konfigurasi Gradle Lama (tanpa Gitlab, penyebaran Docker, untuk proyek sederhana)

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

Konfigurasi baru:

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

Perhatikan https. Selamat coding :)


3

Lingkungan saya saat ini tidak mendukung HTTPS, jadi menambahkan versi repo yang tidak aman memecahkan masalah saya: http://insecure.repo1.maven.org sesuai Sonatype

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

-3

Tambahkan repositori berikut di 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>

Ini akan menyebabkan masalah yang sama karena menggunakanhttp
Yudhistira Arya

1
Saya mencoba ini di Pom dan berhasil
Sathesh

saya mencoba juga dan bekerja x2
Javier J Solis Flores
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.