Saya ingin berbagi pengalaman menggunakan maven melalui proxy.
Anda kemungkinan besar akan menghadapi pengecualian dan pesan seperti:
metadata repositori untuk: 'org.apache.maven.plugins' tidak dapat diambil dari repositori: pusat karena kesalahan: Kesalahan mentransfer file: Koneksi ditolak: terhubung
atau
[PERINGATAN] Gagal mengambil deskriptor plugin untuk org.apache.maven.plugins: maven-clean- plugin: 2.5: Plugin org.apache.maven.plugins: maven-clean-plugin: 2.5 atau salah satunya dependensi tidak dapat diselesaikan: Gagal membaca keterangan artefak untuk org.apache.maven.plugins: maven-clean-plugin: jar: 2.5
Bagaimana cara mengkonfigurasi Maven untuk menggunakan server proxy?
Jawaban:
Untuk detail pengaturan proxy untuk Maven, lihat panduan mini .
Pada dasarnya Anda perlu memastikan bagian proksi di pengaturan global (
[maven install]/conf/settings.xml
), atau pengaturan pengguna (${user.home}/.m2/settings.xml
) dikonfigurasikan dengan benar. Lebih baik melakukan ini di pengaturan pengguna Anda untuk menghindari menyimpan kata sandi dalam teks biasa di lokasi publik.Maven 2.1 memperkenalkan enkripsi kata sandi , tetapi saya tidak punya waktu untuk memeriksa apakah enkripsi tersebut berlaku untuk pengaturan proksi serta kata sandi penyimpanan (tidak melihat mengapa hal itu tidak terjadi).
Untuk info, ada konfigurasi proxy yang dikomentari di pengaturan Anda.xml dan instruksi tentang cara memodifikasinya.
Dari mini-guide, pengaturan Anda akan terlihat seperti ini:
sumber
<username>
dan<password>
harus dihapus (dan tidak diberi konten kosong). Saya butuh waktu beberapa saat untuk mencari tahu.Bagaimana cara menggunakan proxy kaus kaki?
Siapkan terowongan SSH ke server di suatu tempat:
Linux (bash):
Windows:
sumber
MAVEN_OPTS
adalah satu-satunya cara saya bisa mendapatkan Maven untuk mengunduh melalui HTTPS. Menggunakan proxy HTTP atau HTTPS, baik melaluiMAVEN_OPTS
atausettings.xml
, menghasilkanorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
proxy:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
selanjutnyamvn
dalam sesi yang sama akan tanpa proxy.Saya juga memiliki masalah ini, dan saya menyelesaikannya dengan mengedit
settings.xml
file di.m2
folder saya . Sayasettings.xml
seperti ini sekarang:sumber
Perhatikan juga bahwa beberapa plugin (sumber daya jarak jauh muncul di pikiran) menggunakan pustaka yang sangat lama yang hanya menerima konfigurasi proxy melalui MAVEN_OPTS;
Anda mungkin terjebak pada auth untuk yang ini.
sumber
Untuk mengatur Proxy Maven :
Edit sesi proksi di file ~ / .m2 / settings.xml Anda . Jika Anda tidak dapat menemukan file, buat satu.
atau
Edit sesi proksi di {M2_HOME} /conf/settings.xml Anda
Semoga Membantu .. :)
sumber
Itu kemungkinan besar disebabkan oleh 2 masalah:
Jika beberapa dari mereka dihilangkan - pakar dapat gagal dengan pesan kesalahan acak.
Hanya berharap saya telah menyelamatkan seseorang dari googling sekitar masalah ini selama 6 jam, seperti yang saya lakukan.
sumber
Hanya untuk menambah pengalaman saya sendiri dengan ini: proxy perusahaan saya adalah
http://webproxy.intra.companyname.com:3128
. Agar pakar bekerja melalui proxy ini, pengaturannya harus persis seperti iniTidak seperti beberapa file konfigurasi-proxy lainnya, di
protocol
sini dijelaskan cara menyambung ke server proxy, bukan jenis protokol mana yang harus diproksi. Bagianhttp
dari target harus dipisahkan dari nama host, jika tidak maka tidak akan berfungsi.sumber
Terima kasih @krosenvold.
Jika perubahan file pengaturan tidak berfungsi, coba ini di command prompt memiliki file POM.
Ini membantu saya segera setelah perubahan kata sandi.
sumber
Saya menjalankan
cntlm
localy, dikonfigurasi denganNTLMv2
hash kata sandi untuk mengotentikasi dengan proksi perusahaan, dan menggunakanuntuk menggunakan proxy itu dari
maven
. Tentu saja proxy yang Anda gunakan harus mendukungcntlm
/NTLMv2
.sumber
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Dan untuk menambah topik ini, inilah pengalaman saya di bawah ini ... Benar-benar aneh dan memakan waktu jadi saya pikir itu layak ditambahkan.
Saya memiliki masalah serupa yang mencoba membangun portlet-bridge di Windows, mendapatkan kesalahan berikut:
Saya mencoba beberapa hal, mengikuti sedikit selancar:
Mencoba mengatur parent. RelativePath sebagai kosong sehingga maven tidak berpikir orangtua adalah lokal. Ini sesuai saran pada SO di Hudson build fail: POM induk yang tidak dapat diatasi dan dalam forum ini . Ini tidak berpengaruh.
Saya juga mencoba memastikan repositori terdaftar secara eksplisit di settings.xml saya tetapi ini tidak berpengaruh baik.
Saya kemudian memastikan mvn terpaksa mencari repositori, daripada mengandalkan sejarahnya sendiri, seperti yang dibahas dalam blog ini oleh Sarthon . Sayangnya, ini bukan masalah juga.
Dalam beberapa keputusasaan, saya kemudian mengunjungi kembali MAVEN_OPTS saya untuk memastikan saya tidak melanggar pengaturan proxy saya. Ini benar, meskipun dengan nilai yang tidak dikutip:
Jadi, akhirnya, saya memindahkan konfigurasi proksi ke pengaturan saya.xml dan ini berhasil:
Benar-benar tidak yakin mengapa MAVEN_OPTS asli saya tidak berfungsi (tanda kutip?) Sementara konfigurasi settings.xml berhasil. Saya ingin membalikkan perbaikan dan memeriksa setiap langkah lagi tetapi telah membuang banyak waktu. Akan melaporkan kembali kapan dan kapan.
sumber
Saya tahu ini bukan jawaban untuk pertanyaan itu, tetapi mungkin perlu diketahui oleh seseorang yang mencari posting ini. Dimungkinkan juga untuk menginstal proxy repositori Maven seperti nexus .
Pakar Anda akan dikonfigurasi untuk menghubungi proxy Nexus lokal, dan Nexus kemudian akan mengambil (dan cache) artefak. Ini dapat dikonfigurasi melalui antarmuka web dan memiliki dukungan untuk (http) proksi).
Ini bisa menjadi keuntungan, terutama di lingkungan perusahaan, karena artefak tersedia secara lokal dan dapat diunduh dengan cepat, dan Anda tidak lagi bergantung pada ketersediaan repositori Maven eksternal lagi.
Untuk menghubungkan kembali ke pertanyaan; dengan Nexus ada GUI yang bagus untuk konfigurasi proxy, dan itu harus dilakukan di satu tempat saja, dan tidak untuk setiap pengembang.
sumber
jika Anda baru ke setup proxy untuk Maven Dalam kasus saya pertama pergi dan periksa cuaca Home Folder Anda ada
.m2
folder dan di dalamnya harus ada file bernamasettings.xml
jika tidak membuatnya, dan tempel ini dan ubahhost
danport
, kemudian jika perlu ubahnonProxyHosts
Jika ada kasus ini tidak berhasil pergi dan lakukan perubahan di lokasi Home Folder ini
Saya menggunakan Eclipse sebagai IDE
Harapan saya ini akan membantu !!
Catatan: Untuk menghapus proxy cukup pindah
settings.xml
ke tempat lainsumber
Jika pakar bekerja melalui proksi tetapi tidak beberapa plugin yang diminta, coba pengaturan
JAVA_TOOL_OPTIONS
juga dengan-Dhttp*.proxy*
pengaturan.Jika Anda baru
JAVA_OPTS
saja melakukannyasumber
Kecuali untuk teknik yang disebutkan di atas, dengan beberapa upaya, Anda dapat menjalankan maven melalui proxy menggunakan pustaka jproxyloader (ada contoh di halaman bagaimana melakukan ini: http://jproxyloader.sourceforge.net/ ). Ini memungkinkan pengaturan proxy kaus kaki hanya untuk mengunduh artefak.
Dalam solusi yang disebutkan oleh duanni (pengaturan -DsocksProxyHost) ada satu masalah. Jika Anda memiliki tes integrasi yang berjalan terhadap basis data lokal (atau tes lain yang terhubung ke url yang tidak boleh melalui proxy). Tes ini akan berhenti berfungsi karena koneksi ke basis data juga akan diarahkan ke proksi. Dengan bantuan jProxyLoader Anda dapat mengatur proxy hanya untuk host nexus. Selain itu jika Anda mau, Anda bisa meneruskan koneksi ke database melalui proxy lain.
sumber
Beberapa kali Anda perlu menambahkan
<proxy></proxy>
tag lain , dan menentukan https di tag protokol:<protocol>https</protocol>
sumber
Posting di atas membantu menyelesaikan masalah saya. Selain hal di atas, saya harus membuat perubahan berikut untuk membuatnya berfungsi:
Pengaturan JRE net Maven yang dimodifikasi (\ jre \ lib \ net.properties) untuk menggunakan pengaturan proxy sistem.
Termasuk pengaturan server proxy di settings.xml. Saya tidak memberikan pengaturan nama pengguna dan kata sandi untuk menggunakan otentikasi NTLM.
sumber
Maven menyediakan metode bawaan untuk melakukan ini, melalui file bernama settings.xml , dan ini telah dibahas dalam jawaban lain. Namun, itu adalah kebiasaan, terutama di Linux, untuk alat baris perintah untuk secara otomatis menggunakan proxy yang ditentukan oleh variabel lingkungan
https_proxy
.Untuk mengikuti Do tidak mengulangi diri prinsip (yang dimaksudkan untuk membantu Anda menghindari kesalahan), akan menyenangkan jika
mvn
bisa secara otomatis bekerja dengan itu juga.Berikut ini adalah skrip shell yang membuat konversi yang diperlukan:
Anda mungkin memberi nama ini sesuatu seperti
proxied_mvn
dan menjalankannya sebagai:Atau, Anda bisa memindahkan pengaturan lingkungan ke skrip startup Anda.
Gotchas
Ada banyak hal yang bisa salah ketika mencoba mengkonfigurasi Maven untuk akses ke Nexus melalui proxy. Semoga skrip ini akan membantu dengan beberapa masalah yang paling rumit, tetapi yang lain tetap:
Kredensial Nexus tersedia dan benar (hanya jika diperlukan)
Periksa dengan
mvn help:effective-settings
Singgahan Maven: "resolusi tidak akan dipasang kembali"
mvn clean package --update-snapshots
Maven wall-of-text output - Anda harus melihat lebih dekat pada output untuk memastikan pesan kesalahan tidak sedikit berbeda di antara proses
Versi Java yang lebih lama mungkin membutuhkan
_JAVA_OPTIONS
alih-alihJAVA_TOOL_OPTIONS
.Epilog
Ada lebih dari satu jenis Proksi . Sejalan dengan itu, ada lebih dari satu cara pertanyaan ini ditafsirkan - berkontribusi pada sejumlah besar jawaban yang berbeda di sini.
Saya telah secara eksplisit membahas kasus server proxy web (HTTP maju / HTTPS) , yang digunakan untuk mengakses internet dari dalam jaringan perusahaan (untuk beberapa perusahaan). Ini mungkin berbeda dari proxy SOCKS , yang juga telah dibahas dalam beberapa jawaban di sini.
Oh, omong-omong, sejak digunakan
JAVA_TOOL_OPTIONS
, solusi ini dapat diterapkan untuk menjalankan aplikasi Java Anda yang lain di dalam proxy juga.Petunjuk perpisahan ... Contoh saya di atas menggunakan
http://localhost:58080
. Ini karena saya telah mengatur port-forwarding dari sayaCLIENT_PROXY=localhost:58080
ke proxy jaringan yang sebenarnya dengan menggunakan WSL pada klien akses jarak jauh saya untuk menjalankan:sumber