Maven надає вбудований метод цього за допомогою файлу, який називається settings.xml , і це було розглянуто в інших відповідях. Однак прийнято, зокрема, в Linux, інструменти командного рядка автоматично використовувати проксі, вказаний змінною оточенняhttps_proxy
.
Дотримуватися принципу " Не повторюй себе" (який покликаний допомогти вам уникнути помилок), було б добре, якбиmvn
можна було автоматично працювати з цим.
Ось сценарій оболонки, який здійснює необхідні перетворення:
#! /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} $@
Ви можете назвати це щось на кшталт proxied_mvn
і запустити це як:
$ https_proxy=http://localhost:58080 ./proxied_mvn clean package
Крім того, ви можете просто перемістити налаштування середовища у ваші сценарії запуску.
gotchas
Під час спроби налаштувати Maven на доступ до Nexus через проксі можна багато помилок . Сподіваємось, цей сценарій допоможе вирішити деякі найвибагливіші проблеми, але інші залишаються:
Доступні та правильні облікові дані Nexus (лише за потреби)
Перевірте mvn help:effective-settings
Кешування Maven: "роздільну здатність не буде повторено"
mvn clean package --update-snapshots
Вирівнювання тексту на стіні тексту - вам потрібно уважно подивитися на висновок, щоб переконатися, що повідомлення про помилки не відрізняються між пробіжками
Старіші версії Java можуть знадобитися _JAVA_OPTIONS
замість JAVA_TOOL_OPTIONS
.
епілог
Існує кілька видів проксі . Відповідно, це питання було трактовано не одним способом - сприяючи великій кількості розрізнених відповідей.
Я чітко розглядав випадок веб-проксі-сервера (прямий HTTP / HTTPS) , який використовується для доступу до Інтернету з мережі компанії (для деяких компаній). Це може бути помітно відмінне від проксі-сервера SOCKS , про який також було сказано в деяких відповідях тут.
Ну, до речі, оскільки він використовує JAVA_TOOL_OPTIONS
, ці рішення можна застосувати і для запуску інших ваших програм Java всередині проксі .
Підказка про розставання ... Використовується мій приклад вище http://localhost:58080
. Це тому, що я налаштував переадресацію портів від мого CLIENT_PROXY=localhost:58080
до фактичного мережного проксі, використовуючи WSL на своєму клієнті віддаленого доступу для запуску:
ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY