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
В качестве альтернативы вы можете просто переместить настройку среды в свои сценарии запуска.
подводные камни
Есть много вещей, которые могут пойти не так при попытке настроить Maven для доступа к Nexus через прокси. Надеюсь, этот сценарий поможет с некоторыми из самых привередливых проблем, но другие останутся:
Учетные данные Nexus доступны и верны (только при необходимости)
Проверить с mvn help:effective-settings
Кэширование Maven: «разрешение не будет повторяться»
mvn clean package --update-snapshots
Вывод Maven в виде стены текста - вы должны внимательно посмотреть на вывод, чтобы убедиться, что сообщения об ошибках не сильно отличаются между запусками
Более старые версии 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