Saya baru saja mengunduh Maven dan mencoba menjalankan perintah sederhana yang ditemukan di halaman "Maven dalam Lima Menit" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Ini perintahnya:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Ketika saya menjalankannya saya mendapatkan kesalahan dengan sertifikat SSL dan tidak dapat mengunduh dari repositori pusat Maven di https://repo.maven.apache.org/maven2 . Kesalahannya adalah "SunCertPathBuilderException: tidak dapat menemukan jalur sertifikasi yang valid ke target yang diminta".
Saya duduk di belakang firewall perusahaan dan telah mengkonfigurasi dengan benar pengaturan proxy untuk keduanya http
dan https
akses melalui settings.xml
file. Saya ragu bahwa setiap orang yang mengunduh Maven dan menjalankannya untuk pertama kali harus mengimpor sertifikat SSL dari repositori Maven, jadi masalahnya harus ada pada proksi. Adakah yang punya pengalaman dengan ini?
Berikut jejak tumpukan dalam mode debug penuh (-X):
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10+02:00)
Maven home: C:\Projects\maven\bin\..
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_45\jre
Default locale: it_IT, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
[DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2 via *****:8080 with username=*****, password=***
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)
at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)
at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:81)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)
at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)
at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)
at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:288)
at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)
... 23 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
... 26 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)
at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
... 4 more
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:85)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)
at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)
... 8 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 27 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 33 more
Jawaban:
Faktanya adalah plugin maven Anda mencoba untuk terhubung ke repositori jarak jauh https
(mis. Https://repo.maven.apache.org/maven2/ )
Ini adalah konektivitas SSL baru untuk Maven Central telah tersedia pada Agustus, 2014!
Jadi tolong, dapatkah Anda memverifikasi bahwa settings.xml Anda memiliki konfigurasi yang benar.
Anda juga dapat menggunakan repositori http maven sederhana seperti ini
Tolong beri tahu saya jika solusi saya berhasil;)
J.
sumber
Jawaban di atas adalah solusi kerja yang bagus, tetapi inilah cara melakukannya jika Anda ingin menggunakan repo SSL:
Sekarang buka prompt perintah dan ketik (gunakan jalur Anda sendiri):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore
Sekarang Anda dapat menjalankan perintah lagi dengan parameter
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Di bawah linux gunakan path absolut
-Djavax.net.ssl.trustStore=/tmp/mavenKeystore
kalau tidak ini akan terjadi
Seperti ini:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Pilihan:
Anda dapat menggunakan
MAVEN_OPTS
variabel lingkungan sehingga Anda tidak perlu khawatir lagi. Lihat info lebih lanjut tentangMAVEN_OPTS
variabel di sini :sumber
sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
Memperbarui
Saya baru saja menemukan laporan bug ini:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
Tampaknya menjadi penyebab masalah kita di sini. Sesuatu dengan ca-sertifikat-java mengalami kesalahan dan tidak mengisi cacerts sepenuhnya. Bagi saya, ini mulai terjadi setelah saya memutakhirkan ke 15.10 dan bug ini mungkin terjadi selama proses itu.
Solusinya adalah dengan menjalankan perintah berikut:
Jika Anda memeriksa konten keystore (seperti dalam jawaban asli saya), sekarang Anda akan melihat lebih banyak lagi, termasuk DigiCert Global Root CA.
Jika Anda menjalani proses dalam jawaban asli saya, Anda dapat membersihkan kunci yang kami tambahkan dengan menjalankan perintah ini (dengan asumsi Anda tidak menentukan alias lain):
Maven sekarang akan berfungsi dengan baik.
Jawaban Asli
Saya hanya ingin memperluas jawaban Andy tentang menambahkan sertifikat dan menentukan keystore. Itu membuat saya mulai, dan dikombinasikan dengan informasi di tempat lain saya dapat memahami masalah dan menemukan solusi (lebih baik) yang lain.
Jawaban Andy menentukan keystore baru dengan sertifikat Maven secara khusus. Di sini, saya akan sedikit lebih luas dan menambahkan sertifikat root ke truststore java default. Ini memungkinkan saya untuk menggunakan mvn (dan hal-hal java lainnya) tanpa menentukan keystore.
Untuk referensi OS saya adalah Ubuntu 15.10 dengan Maven 3.3.3.
Pada dasarnya, java truststore default dalam pengaturan ini tidak mempercayai sertifikat root dari repo Maven (DigiCert Global Root CA), sehingga perlu ditambahkan.
Saya menemukannya di sini dan mengunduh:
https://www.digicert.com/digicert-root-certificates.htm
Lalu saya menemukan lokasi truststore default, yang berada di sini:
Anda dapat melihat sertifikat apa yang saat ini ada di sana dengan menjalankan perintah ini:
Ketika diminta, kata sandi keystore default adalah "changeit" (tetapi tidak ada yang pernah melakukannya).
Dalam pengaturan saya, sidik jari "DigiCert Global Root CA" tidak ada (DigiCert menyebutnya "cap jempol" pada tautan di atas). Jadi, inilah cara menambahkannya:
Ini akan muncul jika Anda mempercayai sertifikat, katakan ya.
Gunakan keytool -daftar lagi untuk memverifikasi bahwa kuncinya ada. Saya tidak repot-repot menentukan alias (-alias), jadi berakhir seperti ini:
Kemudian saya dapat menjalankan perintah mvn seperti biasa, tidak perlu menentukan keystore.
sumber
Anda dapat menggunakan
-Dmaven.wagon.http.ssl.insecure=true
opsi inisumber
Anda dapat mengimpor sertifikat SSL secara manual dan menambahkannya ke keystore.
Untuk pengguna linux,
Sintaksis:
Contoh:
sumber
Ini mungkin bukan solusi terbaik. Saya mengubah pakar saya dari 3.3.x ke 3.2.x. Dan masalah ini hilang.
sumber
Saya sebenarnya memiliki masalah yang sama.
ketika saya berlari
pada proyek pakar saya, saya mendapatkan kesalahan sertifikat ini oleh alat pakar.
Saya mengikuti @Andy's Answer sampai saya mengunduh file .cer
setelah itu sisa jawaban tidak bekerja untuk saya tetapi saya melakukan yang berikut (saya menjalankan Linux Debian machine)
pertama-tama, jalankan:
misalnya dalam kasus saya adalah:
jika ditanya tentang kata sandi, tekan saja enter.
perintah ini seharusnya mencantumkan semua sertifikat ssl yang diterima oleh java. ketika saya menjalankan perintah ini, dalam kasus saya, saya mendapat 93 sertifikat misalnya.
Sekarang tambahkan file download cer ke cacerts file dengan menjalankan perintah berikut:
tulis kata sandi sudo Anda maka itu akan menanyakan tentang kata sandi keystore
yang standar adalah changeit
kemudian berkata y bahwa Anda percaya sertifikat ini.
jika Anda menjalankan perintah
sekali lagi, dalam kasus saya, saya mendapat 94 konten file cacerts
itu berarti, berhasil ditambahkan.
sumber
Solusi cepat adalah tambahkan kode ini di pom.xml Anda:
Di mana tidak pernah ada untuk menghindari pencarian yang bersertifikat.
sumber
Saya mendapatkan kesalahan yang sama tentang sertifikat SSL ketika Maven mencoba mengunduh modul yang diperlukan secara otomatis.
Sebagai obat, saya mencoba menerapkan jawaban Luke di atas, tetapi menemukan bahwa sertifikat CA Global DigiCert Root sudah ada dalam keystore Java yang tepercaya.
Apa yang membantu saya adalah menambahkan
%JAVA_HOME%\bin
ke variabel Path (saya menjalankan Windows). Dan%JAVA_HOME%
merupakan lokasi JDK, bukan hanya lokasi JRE, karena Maven membutuhkan JDK.Saya tidak yakin mengapa itu membantu, tetapi itu berhasil. Saya benar-benar yakin bahwa ini adalah satu-satunya hal yang saya ubah.
sumber
Jika masalah ini terjadi pada repositori HTTPS , fe https://repo.spring.io/milestone Anda dapat mencoba mengganti dengan yang tidak dijamin: http://repo.spring.io/milestone . Dan itu saja
sumber
Langkah 1: DAPATKAN konten Sertifikat situs web (Anda ingin agar itu diimpor sebagai root tepercaya)
Langkah 2: Simpan semuanya (termasuk jalur BEGIN CERTIFICATE dan END CERTIFICATE, yang penting dalam kasus ini) sebagai godaddyg2.pem dan impor ke toko trust saya melalui:
Langkah 3: Impor sertifikat di keystore (penyimpanan kunci yang dipercaya java)
sumber
Apa yang berhasil untuk saya:
Konfigurasikan
<proxy>
pengaturan di${MAVEN_HOME}/conf/settings.xml
:(Catatan: Untuk orang lain, ini berfungsi ketika mereka dikonfigurasi
${user.home}/.m2/settings.xml
. Jika tidak ada pengaturan.xml di user.home, cukup salin dari conf / di direktori maven.)Lalu tunjukkan
pom.xml
untuk mengunduh dari http maven central repo:Anda juga mungkin perlu mengkonfigurasi proxy http di IDE Anda. Untuk VSCode di
settings.json
:Untuk Win10: Mulai / Cari> Pengaturan proxy jaringan> Alamat skrip
Sumber:
sumber
Saya mengalami masalah ini dalam situasi yang sama, dan saya menulis jawaban terperinci untuk pertanyaan terkait stack overflow yang menjelaskan bagaimana cara lebih mudah memodifikasi cacerts sistem menggunakan alat GUI. Saya pikir ini sedikit lebih baik daripada menggunakan satu-off keystore untuk proyek tertentu atau memodifikasi pengaturan untuk pakar (yang dapat menyebabkan masalah di jalan).
sumber
Meskipun saya meletakkan sertifikat dalam cacerts, saya masih mendapatkan kesalahan. Ternyata kami saya menempatkan mereka di jre, bukan di jdk / jre.
Ada dua keystores, ingatlah itu !!!
sumber
Masalahnya, yang saya dapatkan adalah Sebelumnya, saya menggunakan jdk 1.8.0_31 dengan sertifikat terpasang. Saya beralih ke jdk 1.8.0_191 tetapi tidak menginstal sertifikat.
Tetapi, proyek saya bekerja dengan baik, saya menyadari bahwa ketergantungan mereka sudah diunduh. Jadi, mereka hanya akan menyusun dan mengemas proyek-proyek itu. Tapi, ini tidak berfungsi untuk proyek pakar baru karena ketergantungan mereka tidak diunduh sebelumnya.
Larutan::
sumber
Setelah membuat keystore disebutkan oleh @Andy. Dalam Eclipse, saya menambahkan argumen jvm dan itu berhasil.
sumber
Saya memiliki masalah yang sama dengan SSL dan pakar. Kebijakan TI perusahaan saya membatasi saya untuk membuat perubahan apa pun pada konfigurasi komputer, jadi saya menyalin seluruh .m2 dari komputer saya yang lain dan menempelkan folder .m2 dan berhasil.
folder .m2 biasanya ditemukan di bawah c \ user \ admin
sumber
Hanya penyebab lain: Jika Anda membuka Charles, Anda juga bisa bertemu masalah ini, dalam hal ini hanya berhenti Charles.
sumber
Saya hanya menggunakan versi java baru dan itu berhasil untuk saya.
sumber