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 lingkunganhttps_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:
#! /usr/bin/env bash
function javaproxy {
## using "Shell Parameter Expansion"
request_scheme=$1 ; proxy=$2
notscheme=$(echo ${proxy#*://}) ## parse
scheme=$(echo ${proxy%${notscheme}}) ## remove
scheme=$(echo ${scheme%://}) ## strip
hostport=$(echo ${proxy#*//*}) ## parse
host=$(echo ${hostport%:*}) ## parse
port=$(echo ${hostport#${host}}) ## remove
port=$(echo ${port#:}) ## strip
scheme=$(echo ${scheme:-http}) ## default
host=$(echo ${host:-localhost}) ## default
port=$(echo ${port:-8080}) ## default
echo -n " -D${request_scheme}.proxyHost=${host}"
echo -n " -D${request_scheme}.proxyPort=${port}"
}
JTO=""
if [ $http_proxy ] ; then
JTO="${JTO}$(javaproxy http ${http_proxy})"
fi
if [ $https_proxy ] ; then
JTO="${JTO}$(javaproxy https ${https_proxy})"
fi
if [ $no_proxy ] ; then
JTO="${JTO} -Dhttp.nonProxyHosts=$(echo \"${no_proxy}\"|tr ',' '|')"
fi
export JAVA_TOOL_OPTIONS=${JTO}
echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"
mvn_friendliness_options+=--update-snapshots
mvn ${mvn_friendliness_options} $@
Anda mungkin memberi nama ini sesuatu seperti proxied_mvn
dan menjalankannya sebagai:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
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-alih JAVA_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 saya CLIENT_PROXY=localhost:58080
ke proxy jaringan yang sebenarnya dengan menggunakan WSL pada klien akses jarak jauh saya untuk menjalankan:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY