Menggunakan Maven Behind a Proxy

1. Perkenalan

Dalam tutorial ini, kita akan mengonfigurasi Maven untuk bekerja di belakang proxy - situasi umum di lingkungan di mana kita tidak terhubung langsung ke internet.

Dalam contoh kami, proxy kami berjalan di mesin 'proxy.baeldung.com' dan mendengarkan permintaan proxy melalui HTTP di porta '80'. Kami juga akan menggunakan beberapa situs internal di internal.baeldung.com di mana kami tidak perlu melalui proxy.

2. Konfigurasi Proxy

Pertama, mari kita siapkan konfigurasi proxy dasar tanpa kredensial apa pun .

Mari kita edit setting Maven kita.xml biasanya ditemukan di direktori '/.m2 ′ kita . Jika belum ada di sana, maka kita dapat menyalinnya dari pengaturan global di direktori ' / conf' .

Dan sekarang mari buat file masuk ke dalam bagian:

  proxy.baeldung.com 80  

Karena kita juga menggunakan situs lokal yang tidak perlu melalui proxy, mari kita tentukan menggunakan '|' daftar terpisah dengan localhost kami:

internal.baeldung.com|localhost|127.*|[::1] 

3. Menambahkan Kredensial

Jika proxy kami tidak diamankan, hanya itu yang kami perlukan; Namun, milik kita, jadi mari tambahkan kredensial kita ke definisi proxy :

baeldung changeme 

Kami tidak menambahkan entri nama pengguna / kata sandi jika kami tidak membutuhkannya - bahkan yang kosong - karena memiliki entri saat proxy tidak menginginkannya dapat menyebabkan permintaan kami ditolak.

Konfigurasi terotentikasi minimal kami sekarang akan terlihat seperti ini:

  proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]  

Sekarang, ketika kita menjalankan perintah mvn kita akan pergi melalui proxy untuk terhubung ke situs yang kita cari.

3.1. Entri Opsional

Mari kita berikan id opsional 'BaeldungProxy_Authenticated' untuk membuatnya lebih mudah untuk referensi, jika kita perlu mengganti proxy:

BaeldungProxy_Authenticated

Sekarang, jika kita memiliki proxy lain, kita dapat menambahkan definisi proxy lain, tetapi hanya satu yang dapat aktif. Secara default, Maven akan menggunakan definisi proxy aktif pertama yang ditemukannya .

Definisi proxy aktif secara default, dan mendapatkan definisi implisit:

true

Jika kami ingin menjadikan proxy lain yang aktif, maka kami akan menonaktifkan entri asli kami dengan mengatur menjadi salah:

false

Nilai default Maven untuk protokol proxy adalah HTTP , yang cocok untuk kebanyakan kasus. Jika proxy kami menggunakan protokol yang berbeda, kami akan mendeklarasikannya di sini dan mengganti http dengan protokol yang dibutuhkan proxy kami:

http

Perhatikan bahwa ini adalah protokol yang digunakan proxy - protokol permintaan kami (ftp: //, //, //) tidak bergantung pada ini.

Dan inilah tampilan definisi proxy kami yang diperluas , termasuk elemen opsional:

  BaeldungProxy_Authenticated true http proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]  

Jadi, itu untuk entri proxy dasar kita, tetapi apakah cukup aman untuk kita?

4. Mengamankan Konfigurasi Kami

Sekarang, katakanlah salah satu rekan kami ingin kami mengirimkan konfigurasi proxy kami kepada mereka.

Kami tidak terlalu tertarik untuk mengirimkan kata sandi kami dalam bentuk teks biasa, jadi mari kita lihat betapa mudahnya Maven mengenkripsi kata sandi kami .

4.1. Membuat Kata Sandi Utama

Pertama, pilih sandi utama, ucapkan “te! St! Ma $ ter”.

Sekarang mari mengenkripsi kata sandi utama kita , dengan memasukkannya pada prompt ketika kita menjalankan:

mvn --encrypt-master-password Master Password: 

Setelah kami menekan enter, kami melihat kata sandi terenkripsi kami diapit oleh tanda kurung kurawal:

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2. Memecahkan Masalah Pembuatan Kata Sandi

Jika kita melihat {} alih-alih Master Password: prompt (ini bisa terjadi saat menggunakan bash), maka kita perlu menentukan sandi pada baris perintah.

Mari bungkus kata sandi dalam tanda kutip untuk memastikan ada karakter khusus seperti '!' tidak memiliki efek yang tidak diinginkan.

Jadi, mari gunakan tanda kutip tunggal jika kita menggunakan bash:

mvn --encrypt-master-password 'te!st!ma$ter'

Atau gunakan tanda kutip ganda jika menggunakan prompt perintah Windows:

mvn --encrypt-master-password "te!st!ma$ter"

Sekarang, terkadang sandi master yang kami buat berisi kurung kurawal , seperti contoh ini dengan tanda kurung kurawal tutup, '}', setelah 'UD':

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

Dalam hal ini, kita dapat:

  • jalankan lagi perintah mvn –encrypt-master-password untuk membuat yang lain (mudah-mudahan tanpa kurung kurawal)
  • lepas tanda kurung kurawal di sandi kami dengan menambahkan garis miring terbalik di depan '{' atau ' }'

4.3. Membuat File settings-security.xml

Sekarang mari kita masukkan kata sandi terenkripsi kita, dengan '\}' yang diloloskan, ke dalam file bernama file settings-security.xml di direktori .m2 kita :

 {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=} 

Terakhir, Maven mengizinkan kita menambahkan komentar di dalam elemen master.

Mari tambahkan beberapa teks sebelum pembatas sandi '{', berhati-hatilah untuk tidak menggunakan {or} dalam komentar kita karena Maven menggunakannya untuk menemukan sandi kita:

We escaped the curly brace with '\' {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}

4.4. Menggunakan Drive yang Dapat Dilepas

Katakanlah kita perlu ekstra aman dan ingin menyimpan kata sandi utama kita di perangkat terpisah .

Pertama, kami akan menempatkan file settings-security.xml kami di direktori config pada drive yang dapat dilepas, "R:":

R:\config\settings-security.xml

Dan sekarang, kami akan memperbarui file settings-security.xml di direktori .m2 kami untuk mengarahkan Maven ke setting-security.xml kami yang sebenarnya di drive yang dapat dilepas:

   R:\config\settings-security.xml 

Maven sekarang akan membaca kata sandi master terenkripsi kami dari file yang kami tentukan di elemen relokasi , di drive yang dapat dilepas.

5. Mengenkripsi Sandi Proxy

Sekarang kami memiliki kata sandi utama terenkripsi, kami dapat mengenkripsi kata sandi proxy kami .

Mari jalankan perintah berikut dan masukkan kata sandi kita, " changeme", pada prompt:

mvn --encrypt-password Password:

Kata sandi terenkripsi kami ditampilkan:

{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}

Langkah terakhir kami adalah mengedit bagian proxy di file settings.xml kami, dan memasukkan kata sandi terenkripsi kami :

  BaeldungProxy_Encrypted proxy.baeldung.com 80 baeldung {U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}  

Simpan ini, dan Maven sekarang seharusnya dapat terhubung ke internet melalui proxy kami, menggunakan kata sandi terenkripsi kami.

6. Menggunakan Properti Sistem

Meskipun mengonfigurasi Maven melalui file pengaturan adalah pendekatan yang disarankan , kami dapat mendeklarasikan konfigurasi proxy kami melalui Properti Sistem Java.

Jika sistem operasi kami sudah memiliki proxy yang dikonfigurasi, kami dapat menyetel:

-Djava.net.useSystemProxies=true

Alternatifnya, agar selalu diaktifkan, jika kita memiliki hak admin, kita dapat mengaturnya di file /lib/net.properties kita .

Namun, perhatikan bahwa meskipun Maven sendiri mungkin menghormati pengaturan ini, tidak semua plugin melakukannya, jadi kami mungkin masih mendapatkan koneksi yang gagal menggunakan metode ini.

Bahkan saat diaktifkan, kami dapat menggantinya dengan menyetel detail proxy HTTP kami di properti sistem http.proxyHost :

-Dhttp.proxyHost=proxy.baeldung.com

Proksi kami mendengarkan pada port default 80, tetapi jika mendengarkan pada port 8080, kami akan mengonfigurasi properti http.proxyPort :

-Dhttp.proxyPort=8080

Dan untuk situs kami yang tidak membutuhkan proxy :

-Dhttp.nonLocalHosts="internal.baeldung.com|localhost|127.*|[::1]"

Jadi, jika proxy kita ada di 10.10.0.100, kita bisa menggunakan:

mvn compile -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1

Tentu saja, jika proxy kami memerlukan autentikasi , kami juga akan menambahkan :

-Dhttp.proxyUser=baeldung -Dhttp.proxyPassword=changeme

Dan jika kami ingin beberapa setelan ini diterapkan ke semua pemanggilan Maven kami, kami dapat menentukannya di variabel lingkungan MAVEN_OPTS:

set MAVEN_OPTS= -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080

Sekarang, setiap kali kita menjalankan ' mvn ' pengaturan ini secara otomatis akan diterapkan - sampai kita keluar.

7. Kesimpulan

Pada artikel ini, kami mengonfigurasi proxy Maven dengan dan tanpa kredensial dan mengenkripsi kata sandi kami. Kami melihat cara menyimpan kata sandi utama kami di drive eksternal, dan juga melihat konfigurasi proxy dengan menggunakan properti sistem.

Sekarang kita dapat membagikan file settings.xml kita dengan kolega kita tanpa memberi mereka kata sandi kita dalam teks biasa, dan menunjukkan kepada mereka cara mengenkripsi mereka!

Seperti biasa, contoh dalam artikel ini tersedia di GitHub.