Menggunakan Maven Behind a Proxy

1. Pengenalan

Dalam tutorial ini, kita akan mengkonfigurasi Maven untuk bekerja di belakang proksi - situasi biasa di persekitaran di mana kita tidak berhubung terus ke internet.

Dalam contoh kami, proksi kami berjalan di mesin 'proxy.baeldung.com' dan ia mendengar permintaan proksi melalui HTTP pada port '80'. Kami juga akan menggunakan beberapa laman web dalaman di internal.baeldung.com di mana kami tidak perlu melalui proksi.

2. Konfigurasi Proksi

Pertama, mari sediakan konfigurasi proksi asas tanpa bukti kelayakan .

Mari edit setting Maven kami.xml yang biasanya terdapat di direktori ' /.m2 ' kami . Sekiranya belum ada, maka kita dapat menyalinnya dari tetapan global di direktori ' / conf' .

Dan sekarang mari kita buat masuk ke dalam bahagian:

  proxy.baeldung.com 80  

Oleh kerana kami juga menggunakan laman web tempatan yang tidak perlu melalui proksi, mari tentukan di dalamnya menggunakan '|' senarai berasingan dengan localhost kami:

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

3. Menambah Kepujian

Sekiranya proksi kami tidak dijamin, hanya itu yang kami perlukan; namun demikian, jadi mari kita tambahkan bukti kelayakan kita pada definisi proksi :

baeldung changeme 

Kami tidak menambah entri nama pengguna / kata laluan jika kami tidak memerlukannya - bahkan yang kosong - kerana memasukkannya semasa proksi tidak mahu mereka boleh menyebabkan permintaan kami ditolak.

Konfigurasi minimum kami yang disahkan kini kelihatan seperti ini:

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

Sekarang, apabila kita menjalankan perintah mvn, kita akan melalui proksi untuk menyambung ke laman web yang kita cari.

3.1. Penyertaan Pilihan

Mari berikan id pilihan 'BaeldungProxy_Authenticated' untuk memudahkan rujukan, sekiranya kita perlu menukar proksi:

BaeldungProxy_Authenticated

Sekarang, jika kita mempunyai proksi lain, kita boleh menambahkan definisi proksi yang lain, tetapi hanya satu yang boleh aktif. Secara lalai, Maven akan menggunakan definisi proksi aktif pertama yang dijumpainya .

Definisi proksi aktif secara lalai, dan dapatkan definisi tersirat:

true

Sekiranya kami ingin menjadikan proksi lain sebagai aktif, maka kami akan nyahaktifkan entri asal kami dengan menetapkan kepada palsu:

false

Nilai lalai Maven untuk protokol proksi adalah HTTP , yang sesuai untuk kebanyakan kes. Sekiranya proksi kami menggunakan protokol yang berbeza, kami akan menyatakannya di sini dan menggantikan http dengan protokol yang diperlukan oleh proksi kami:

http

Perhatikan bahawa ini adalah protokol yang digunakan oleh proksi - protokol permintaan kami (ftp: //, //, //) tidak bergantung kepada ini.

Seperti inilah definisi proksi yang diperluas kami , termasuk elemen pilihan:

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

Jadi, itu sahaja untuk kemasukan proksi asas kami, tetapi adakah cukup selamat untuk kami?

4. Menjamin Konfigurasi Kami

Sekarang, katakan salah seorang rakan sekerja kami mahu kami menghantar konfigurasi proksi kami kepada mereka.

Kami tidak terlalu berminat untuk menghantar kata laluan kami dalam teks biasa, jadi mari kita lihat betapa mudahnya Maven membuatnya menyulitkan kata laluan kami .

4.1. Membuat Kata Laluan Induk

Pertama, mari pilih kata laluan induk, katakan "te! St! Ma $ ter".

Sekarang mari kita mengenkripsi kata laluan utama kami , dengan memasukkannya pada arahan ketika kita menjalankan:

mvn --encrypt-master-password Master Password: 

Setelah menekan enter, kami melihat kata laluan kami yang disulitkan tertutup di antara pendakap keriting:

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2. Penyelesaian Masalah Penjanaan Kata Laluan

Sekiranya kita melihat {} dan bukannya Kata Laluan Utama: prompt (ini dapat terjadi ketika menggunakan bash), maka kita perlu menentukan kata laluan pada baris perintah.

Mari bungkus kata laluan dengan tanda petik untuk memastikan watak khas seperti '!' tidak mempunyai kesan yang tidak diingini

Oleh itu, mari kita gunakan petikan tunggal jika kita menggunakan bash:

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

Atau gunakan tanda petik dua kali jika menggunakan arahan arahan Windows:

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

Sekarang, kadangkala kata laluan induk kami yang dihasilkan mengandungi pendakap kerinting , seperti contoh ini dengan pendakap kerinting penutup, '}', selepas 'UD':

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

Dalam kes ini, kita boleh:

  • jalankan arahan mvn –encrypt-master-password sekali lagi untuk menghasilkan yang lain (semoga tanpa pendakap kerinting)
  • melepaskan pendakap keriting dalam kata laluan kami dengan menambahkan garis miring terbalik di hadapan '{' atau ' }'

4.3. Membuat fail tetapan-security.xml

Sekarang mari masukkan kata laluan kami yang dienkripsi, dengan '\}' yang dilarikan , ke dalam fail yang disebut fail settings-security.xml di direktori .m2 kami :

 {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=} 

Terakhir, Maven membolehkan kami menambahkan komen di dalam elemen induk.

Mari tambahkan beberapa teks sebelum kata laluan '' pembatas, berhati-hati untuk tidak menggunakan {atau} dalam komen kami kerana Maven menggunakannya untuk mencari kata laluan kami:

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

4.4. Menggunakan Pemacu yang boleh ditanggalkan

Katakanlah kita perlu lebih selamat dan ingin menyimpan kata laluan utama kami pada peranti yang berasingan .

Pertama, kami akan meletakkan fail setting-security.xml kami dalam direktori konfigurasi pada pemacu yang boleh ditanggalkan, "R:":

R:\config\settings-security.xml

Dan sekarang, kami akan mengemas kini fail setting-security.xml di direktori .m2 kami untuk mengalihkan Maven ke setting-security.xml sebenar kami pada pemacu yang boleh ditanggalkan kami:

   R:\config\settings-security.xml 

Maven sekarang akan membaca kata laluan induk kami yang disulitkan dari fail yang kami nyatakan dalam elemen penempatan semula , pada pemacu boleh tanggal kami.

5. Menyulitkan Kata Laluan Proksi

Sekarang kami mempunyai kata laluan utama yang dienkripsi, kami dapat menyulitkan kata laluan proksi kami .

Mari jalankan perintah berikut dan masukkan kata laluan kami, " changeme", pada arahan:

mvn --encrypt-password Password:

Kata laluan kami yang disulitkan ditunjukkan:

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

Langkah terakhir kami adalah mengedit bahagian proksi dalam fail setting.xml kami, dan memasukkan kata laluan kami yang disulitkan :

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

Simpan ini, dan Maven kini seharusnya dapat menyambung ke internet melalui proksi kami, menggunakan kata laluan kami yang disulitkan.

6. Menggunakan Sifat Sistem

Walaupun mengkonfigurasi Maven melalui file pengaturan adalah pendekatan yang disarankan , kami dapat menyatakan konfigurasi proksi kami melalui Java System Properties.

Sekiranya sistem operasi kami sudah mempunyai proksi yang dikonfigurasi, kami dapat menetapkan:

-Djava.net.useSystemProxies=true

Sebagai alternatif, agar selalu diaktifkan, jika kita mempunyai hak admin, kita dapat menetapkannya di file /lib/net.properties kami .

Walau bagaimanapun, mari kita perhatikan bahawa walaupun Maven sendiri menghormati tetapan ini, tidak semua pemalam melakukannya, jadi kita mungkin masih gagal mendapatkan sambungan menggunakan kaedah ini.

Walaupun diaktifkan, kita dapat menggantinya dengan menetapkan butiran proksi HTTP kami pada harta sistem http.proxyHost :

-Dhttp.proxyHost=proxy.baeldung.com

Proksi kami mendengar pada port 80 lalai, tetapi jika mendengar pada port 8080, kami akan mengkonfigurasi harta http.proxyPort :

-Dhttp.proxyPort=8080

Dan untuk laman web kami yang tidak memerlukan proksi :

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

Jadi, jika proksi kami berada pada 10.10.0.100, kami boleh menggunakan:

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

Sudah tentu, jika proksi kami memerlukan pengesahan , kami juga akan menambahkan :

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

Dan sekiranya kami mahu beberapa tetapan ini berlaku untuk semua permintaan Maven kami, kami dapat menentukannya dalam pemboleh ubah persekitaran MAVEN_OPTS:

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

Sekarang, setiap kali kita menjalankan ' mvn ', tetapan ini akan digunakan secara automatik - sehingga kita keluar.

7. Kesimpulannya

Dalam artikel ini, kami mengkonfigurasi proksi Maven dengan dan tanpa tauliah dan menyulitkan kata laluan kami. Kami melihat cara menyimpan kata laluan utama kami pada pemacu luaran, dan juga melihat konfigurasi proksi dengan menggunakan sifat sistem.

Sekarang kita boleh berkongsi kami settings.xml fail dengan rakan-rakan kita tanpa memberi mereka kata laluan kami dalam teks biasa, dan menunjukkan kepada mereka bagaimana untuk menyulitkan mereka!

Seperti biasa, contoh dalam artikel ini terdapat di GitHub.