WedX - журнал о программировании и компьютерных науках

Как настроить прокси-сервер для HTTP и HTTPS в Maven settings.xml?

Я использую Maven 3.1.1 за прокси-сервером. Один и тот же прокси обрабатывает трафик HTTP и HTTPS.

Кажется, я не могу сказать maven, используя settings.xml, чтобы использовать оба протокола. Мне кажется, что возможно иметь только один активный прокси, поскольку используется тот активный прокси, который определен первым, а последующие определения «активного» прокси игнорируются. Это мой settings.xml:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
    <proxy>
        <id>myhttpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

Можно ли настроить прокси для HTTP и HTTPS в maven settings.xml? Я знаю, что могу обойти это, передав системные свойства Java вызову maven, например:

-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128

но ведь это должно быть возможно изнутри settings.xml?

Обнаружены ошибки Maven, такие как MNG-2305 и MNG-4394 предполагает, что проблема решена, но я не уверен.

В качестве альтернативы, есть ли «прокси-прокси», который я мог бы запустить локально, на который я мог бы указать maven? «Прокси-прокси» будет соответствующим образом маршрутизировать http/https. Несмотря на это, мне все равно нужно было бы определить два активных определения прокси в settings.xml, чтобы Maven направлял оба типа трафика.

24.06.2015

Ответы:


1

Прокси-сервер Maven из settings.xml используется как для http, так и для https, поэтому вам просто нужно определить один прокси-сервер, и он будет использоваться для обоих, вам просто нужно оставить только один тег proxy, например:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>192.168.1.2</host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

Приведенный выше протокол является протоколом прокси-сервера, а не проксируемого запроса.

12.06.2016
  • Очень полезная информация, жаль, что вам не приписали больше за нее. +1, у меня сработало. 04.07.2016
  • @krzyk документация по настройкам maven, похоже, согласна с вами: протокол, хост , порт: протокол://хост:порт прокси-сервера, разделенный на отдельные элементы. Я попытаюсь перепроверить это - это было давно...! 23.07.2016
  • Я знаю, это выглядит так, как будто протокол относится к протоколу прокси, но у меня это не сработало только с одним прокси. Когда я добавил два прокси, как предложил OP, у меня это сработало (с Maven 3.3.9). Сначала это не сработало, потому что я скопировал/вставил прокси-сервер в settings.xml и забыл указать другой идентификатор для второго прокси-сервера. После того, как я поставил другой идентификатор, это сработало. 15.12.2016
  • @StephenHartley У вас была возможность проверить это? 21.02.2017
  • Не работает. Вам нужно проксировать записи, одну для HTTP, одну для HTTPS, но вы должны использовать теги ID с разными ID, иначе один будет проигнорирован 03.03.2017
  • Я опубликовал свой ответ о реальных тестах с использованием Eclipse Maven, который показал, что protocol действительно для прокси-сервера, а не для запроса URL-адреса, и что maven использует только первый активный прокси-сервер и игнорирует любые другие. stackoverflow.com/a/52508940 . @SorinPostelnicu @StephenHartley @MaxRobbertze 26.09.2018

  • 2

    Он работает без дополнительной ...<id>httpsproxy</id>... записи (как упомянул @Krzysztof Krasoń) и с ней (как сказал автор вопроса). Проблема для нас заключалась в том, что Eclipse->Maven->User Settings->[x] Update Settings явно не работал вообще, и для проверки некоторых вещей нужно было проверить Eclipse->Maven->[x] Download repository index updates on startup (например, Maven Repositories View->Global Repositories->central->Update Index). И больше всего:

    Eclipse необходимо перезапускать после каждого settings.xml обновления! :-/

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

    • Кеплер (4.3) и Неон (4.6)
    • и их встроенные версии Maven (3.2.1/3.3.9), а также внешний 3.3.3
    • с https:// и https:// URL
    04.05.2017

    3

    Мои тесты с Eclipse Maven показывают, что protocol в settings.xml относится к протоколу прокси-сервера, а не к протоколу запроса URL. Это также показывает, что Maven использует только первый активный прокси-сервер из списка и игнорирует остальные.

    Вот мои доказательства:

    <сильный>1. В документации говорится, что

    active: true, если этот прокси активен. Это полезно для объявления набора прокси, но одновременно может быть активен только один.

    протокол, хост, порт: протокол://хост:порт прокси-сервера, разделенный на отдельные элементы."

    <сильный>2. исходный код еще понятнее:

        /**
         * Get the protocol of the proxy server.
         * @return the protocol of the proxy server
         */
        public String getProtocol()
        {
            return protocol;
        }
    

    <сильный>3. Тесты в реальных условиях (с использованием Eclipse Maven):

    а. 1-й прокси - фиктивный ftp, 2-й - настоящий http, 3-й - настоящий https. Результат: НЕУДАЧА.

    Если бы протокол был для запроса URL, то Maven искал бы настоящие прокси-серверы http/https и работал бы отлично. Вместо этого он использовал 1-й прокси-сервер, хотя это был «ftp», и потерпел неудачу.

        <proxies>
            <proxy>
                <id>bogus_ftp</id>
                <active>true</active>
                <protocol>ftp</protocol>
                <port>123</port>
                <host>bogus.proxy.com</host>
            </proxy>
            <proxy>
                <id>real_http</id>
                <active>true</active>
                <protocol>http</protocol>
                <port>123</port>
                <host>real.proxy.com</host>
            </proxy>
            <proxy>
                <id>real_https</id>
                <active>true</active>
                <protocol>https</protocol>
                <port>123</port>
                <host>real.proxy.com</host>
            </proxy>
        </proxies>
    

    <сильный>б. 1-й прокси настоящий http, 2-й фиктивный https. Результат: УСПЕХ.

    Это показывает, что он использовал только 1-й прокси. В противном случае он использовал бы 2-й прокси-сервер для запросов https, попал бы на фиктивный прокси-сервер и потерпел бы неудачу.

        <proxies>
            <proxy>
                <id>real_http</id>
                <active>true</active>
                <protocol>http</protocol>
                <port>123</port>
                <host>real.proxy.com</host>
            </proxy>
            <proxy>
                <id>bogus_https</id>
                <active>true</active>
                <protocol>https</protocol>
                <port>123</port>
                <host>bogus.proxy.com</host>
            </proxy>
        </proxies>
    

    в. Оба являются http, но 1-й прокси-фиктивный, 2-й настоящий. Результат: НЕУДАЧА.

    Это показывает, что maven не использует несколько прокси-серверов даже для одного и того же протокола. В противном случае он попробовал бы второй реальный прокси и преуспел.

        <proxies>
            <proxy>
                <id>bogus_http</id>
                <active>true</active>
                <protocol>http</protocol>
                <port>123</port>
                <host>bogus.proxy.com</host>
            </proxy>
            <proxy>
                <id>real_http</id>
                <active>true</active>
                <protocol>http</protocol>
                <port>123</port>
                <host>real.proxy.com</host>
            </proxy>
        </proxies>
    
    26.09.2018
  • Уважаемый @wisbucky, во всех трех тестах вы забыли указать разные идентификаторы для объявлений прокси. Если вы укажете разные идентификаторы, то это сработает. Вероятно, проблема в том, что Maven генерирует идентификатор по умолчанию при отсутствии и генерирует один и тот же идентификатор для всех объявлений прокси. Не могли бы вы повторить все свои примеры, но с допустимыми разными идентификаторами, и сообщить нам, действительно ли он работает с более чем одним активным прокси? 27.09.2018
  • @SorinPostelnicu, это хороший момент. Я повторно протестировал все 3 примера с разными <id> (я отредактировал сообщение, чтобы отразить это). Точно такие же результаты, как и раньше. Вероятно, вы можете воспользоваться преимуществами id с аргументами командной строки, но Eclipse Maven по умолчанию этого не делает. 29.09.2018
  • Это работает при запуске mvn из командной строки, но я действительно не тестировал Eclipse Maven. Если это не работает, то это должно быть подано как ошибка для Elipse Maven. 01.10.2018

  • 4

    Я решил проблему с обновлением версии maven, или, другими словами, не используя встроенную версию maven eclipse, а внешнюю версию 3.3.9.

    27.03.2017
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: wedx@cp9.ru