«1. Введение

В этом руководстве мы собираемся настроить Maven для работы за прокси-сервером — обычная ситуация в средах, где мы не подключаемся напрямую к Интернету.

В нашем примере наш прокси работает на машине «proxy.baeldung.com» и прослушивает прокси-запросы через HTTP на порту «80». Мы также будем использовать некоторые внутренние сайты по адресу internal.baeldung.com, где нам не нужно использовать прокси.

2. Настройка прокси

Во-первых, давайте настроим базовую конфигурацию прокси без каких-либо учетных данных.

Давайте отредактируем наш Maven settings.xml, который обычно находится в нашем каталоге «\u003cuser_home\u003e/.m2». Если его там еще нет, мы можем скопировать его из глобальных настроек в каталог «\u003cmaven_home\u003e/conf».

А теперь давайте создадим запись \u003cproxy\u003e внутри секции \u003cproxy\u003e:

<proxies>
   <proxy>
        <host>proxy.baeldung.com</host>
        <port>80</port>
    </proxy>
</proxies>

Поскольку мы также используем локальный сайт, которому не нужно проходить через прокси, давайте укажем его в \u003cnonProxyHosts\u003e используя «|» разделенный список с нашим локальным хостом:

<nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>

3. Добавление учетных данных

Если наш прокси не был защищен, это все, что нам нужно; однако, это наш, поэтому давайте добавим наши учетные данные в определение прокси:

<username>baeldung</username>
<password>changeme</password>

Мы не добавляем записи имени пользователя/пароля, если они нам не нужны, даже пустые, поскольку они присутствуют когда прокси не хочет их, это может привести к тому, что наши запросы будут отклонены.

Наша минимальная аутентифицированная конфигурация теперь должна выглядеть так:

<proxies>
   <proxy>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>changeme</password>
        <nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
    </proxy>
</proxies>

Теперь, когда мы запустим команду mvn, мы будем использовать прокси для подключения к сайтам, которые нам нужны.

3.1. Необязательные записи

Давайте присвоим ему необязательный идентификатор «BaeldungProxy_Authenticated», чтобы упростить ссылку на случай, если нам когда-нибудь понадобится переключить прокси:

<id>BaeldungProxy_Authenticated</id>

Теперь, если у нас есть другой прокси, мы можем добавить еще один определение прокси, но активным может быть только один. По умолчанию Maven будет использовать первое обнаруженное активное определение прокси.

Определения прокси активны по умолчанию и получают неявное определение:

<active>true</active>

Если бы мы хотели сделать активным другой прокси, то мы бы деактивировали исходную запись, установив \u003cactive\u003e в false :

<active>false</active>

Значение по умолчанию для протокола прокси в Maven — HTTP, что подходит для большинства случаев. Если наш прокси использует другой протокол, мы должны объявить его здесь и заменить http протоколом, который нужен нашему прокси:

<protocol>http</protocol>

Обратите внимание, что это протокол, который использует прокси — протокол наших запросов (ftp ://, http://, https://) не зависит от этого.

А вот как выглядит наше расширенное определение прокси, включая необязательные элементы:

<proxies>
   <proxy>
        <id>BaeldungProxy_Authenticated</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>changeme</password>
        <nonProxyHosts>internal.baeldung.com|localhost|127.*|[::1]</nonProxyHosts>
    </proxy>
</proxies>

Итак, это все для нашей базовой записи прокси, но достаточно ли она безопасна для нас?

4. Защита нашей конфигурации

Теперь предположим, что один из наших коллег хочет, чтобы мы отправили ему нашу конфигурацию прокси.

Мы не слишком заинтересованы в отправке нашего пароля в виде простого текста, поэтому давайте посмотрим, насколько легко Maven позволяет шифровать наши пароли.

4.1. Создание мастер-пароля

Во-первых, давайте выберем мастер-пароль, скажем «te!st!ma$ter».

Теперь давайте зашифруем наш мастер-пароль, введя его в подсказке при запуске:

mvn --encrypt-master-password
Master Password:

После того, как мы нажали ввод, мы видим наш зашифрованный пароль, заключенный в фигурные скобки:

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2 . Устранение неполадок с генерацией пароля

Если мы видим {} вместо приглашения Master Password: (это может произойти при использовании bash), то нам нужно указать пароль в командной строке.

Давайте заключим пароль в кавычки, чтобы убедиться, что любые специальные символы, такие как «˜!» не иметь нежелательных эффектов.

Итак, давайте использовать одинарные кавычки, если мы используем bash:

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

Или использовать двойные кавычки, если используем командную строку Windows:

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

Теперь иногда наш сгенерированный мастер-пароль содержит фигурные скобки , как в этом примере с закрывающей фигурной скобкой «}» после «UD»:

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

В этом случае мы можем:

    запустить mvn –encrypt-master -password еще раз, чтобы сгенерировать еще один (надеюсь, без фигурной скобки) избегайте фигурных скобок в нашем пароле, добавляя обратную косую черту перед «{» или «}»

4.3. Создание файла settings-security.xml

«Теперь давайте поместим наш зашифрованный пароль с экранированным ‘\\}’ в файл с именем settings-security.xml file в нашем каталоге .m2:

<settingsSecurity>
    <master>{QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}</master>
</settingsSecurity>

Наконец, Maven позволяет нам добавить комментарий внутри мастера элемент.

Давайте добавим какой-нибудь текст перед разделителем пароля ‘{‘€˜, стараясь не использовать { или } в нашем комментарии, так как Maven использует их для поиска нашего пароля:

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

4.4. Использование съемного диска

Допустим, нам нужна дополнительная безопасность и мы хотим сохранить наш мастер-пароль на отдельном устройстве.

Во-первых, мы поместим наш файл settings-security.xml в каталог config на съемном диске «R:» :

R:\config\settings-security.xml

А теперь мы обновим settings-security. xml в нашем каталоге .m2, чтобы перенаправить Maven на наш реальный файл settings-security.xml на нашем съемном диске: водить машину.

<settingsSecurity>
    <relocation>R:\config\settings-security.xml</relocation>
</settingsSecurity>

5. Шифрование паролей прокси

Теперь у нас есть зашифрованный главный пароль, мы можем зашифровать наш пароль прокси.

Давайте запустим следующую команду и введем наш пароль «changeme» ​​в приглашении:

Отображается наш зашифрованный пароль:

mvn --encrypt-password
Password:

Наш последний шаг — отредактировать раздел прокси в наш файл settings.xml и введите наш зашифрованный пароль:

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

Сохраните это, и теперь Maven сможет подключаться к Интернету через наш прокси-сервер, используя наши зашифрованные пароли.

<proxies>
   <proxy>
        <id>BaeldungProxy_Encrypted</id>
        <host>proxy.baeldung.com</host>
        <port>80</port>
        <username>baeldung</username>
        <password>{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}</password>
    </proxy>
</proxies>

6. Использование свойств системы

Несмотря на то, что настройка Maven через файл настроек является рекомендуемым подходом, мы можем объявить нашу конфигурацию прокси через свойства системы Java.

Если в нашей операционной системе уже настроен прокси, мы можем установить:

В качестве альтернативы, чтобы он всегда был включен, если у нас есть права администратора, мы можем установить это в нашем \u003cJRE\u003e/lib/net Файл .properties.

-Djava.net.useSystemProxies=true

Однако давайте отметим, что, хотя сам Maven может учитывать этот параметр, не все плагины его поддерживают, поэтому мы все равно можем получить неудачные соединения, используя этот метод.

Даже когда он включен, мы можем переопределить его, установив данные нашего HTTP-прокси в системном свойстве http.proxyHost:

Наш прокси прослушивает порт 80 по умолчанию, но если он прослушивал порт 8080, мы настроим свойство http.proxyPort:

-Dhttp.proxyHost=proxy.baeldung.com

И для наших сайтов, которым не нужен прокси:

-Dhttp.proxyPort=8080

Итак, если наш прокси 10.10.0.100, мы можем использовать: ~~ ~

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

Конечно, если наш прокси требует аутентификации, мы также добавим:

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

И если мы хотим, чтобы некоторые из этих настроек применялись ко всем нашим вызовам Maven, мы можем определить их в среде MAVEN_OPTS. переменная:

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

Теперь всякий раз, когда мы запускаем «mvn», эти настройки будут применяться автоматически — до тех пор, пока мы не выйдем.

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

7. Заключение

В этой статье мы настроили прокси-сервер Maven как с учетными данными, так и без них, а также зашифровали наш пароль. Мы увидели, как сохранить наш мастер-пароль на внешнем диске, а также рассмотрели настройку прокси-сервера с помощью системных свойств.

Теперь мы можем поделиться нашим файлом settings.xml с нашими коллегами, не сообщая им наши пароли в виде простого текста, и показать им, как шифровать их собственные!

Как обычно, примеры из этой статьи доступны на GitHub.

«