Сделать настройки Maven Proxy/Server настраиваемыми на основе местоположения?

Итак, я не уверен, что лучший способ добиться этого - это, но в основном у меня есть ноутбук, который я использую для работы над проектами Maven. Он отлично работает, когда я на работе, но как только я выхожу из-за двери своего корпоративного прокси-сервера и сервера maven, мне часто приходится много хлопотать с файлом settings.xml, когда я дома если я не VPN'ed в:

  • У нас есть прокси-сервер Maven Repository, установленный корпорацией, чтобы хранить некоторые из наших собственных артефактов и быть средним человеком для наших часто используемых артефактов.
  • У нас есть прокси-сервер http, который мы используем для подключения к внешнему миру.

Обе конфигурации были обработаны моим файлом settings.xml для установки одной группы Nexus и прокси-сервер maven. Если я не подключен к VPN, находясь вдали от офиса, мне приходится гадать с помощью параметра settings.xml каждый раз, когда я не нахожусь на нем, а затем переключаю его обратно, когда я на нем.

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

Ответы

Ответ 1

Хотя я могу думать о некотором профилевом решении для обработки прокси (в основном, считывая значение <active> из свойства, определенного в профиле), это не будет полностью автоматизировано (активация профиля не поддерживает сетевые материалы), если вы не можете найти файл, который присутствует или нет, в зависимости от вашего местоположения (в этом случае вы можете использовать существующий/отсутствующий файл триггер, но это своего рода хаки). Во всяком случае, это разрешило бы только одну часть проблемы, потому что зеркала не могут быть объявлены в профилях (см. MNG-3525).

Итак, вместо того, чтобы пытаться контролировать это с помощью профиля, моим предложением было бы использовать два settings.xml и передать ваш файл settings-home.xml с помощью командной строки -s, когда вы дома.

Другой вариант - автоматизировать изменения в settings.xml с помощью script (Groovy будет хорошим выбором, поскольку кто-то сообщил в MNG-3525).

Ответ 2

Я обнаружил, что переменные среды использования для установки nonProxyHosts вместе с proxy и noproxy псевдонимами оболочки являются наиболее удобным решением при переключении между сетями с прокси-сервером и без него.

В settings.xml настройте прокси с

<host>proxy.corporation.int</host>
<port>8080</port>
<nonProxyHosts>${env.MAVEN_NONPROXY}</nonProxyHosts>

Тогда в ~/.profile установите

export MAVEN_NONPROXY_PROXY='*.corporation.int|local.net|some.host.com'
export MAVEN_NONPROXY_NOPROXY='*'

alias proxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_PROXY\" && export all_proxy=http://proxy.corporation.int:8080"
alias noproxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_NOPROXY\" && unset all_proxy"


Чтобы выполнить переход в роуминге, вы просто выполните из оболочки:

[[email protected] me]$ proxy

или

[[email protected] me]$ noproxy

Очевидно, что обе псевдонимы proxy и noproxy могут включать гораздо больше изменений, чем просто настройка MAVEN_NOPROXY и all_proxy.

Ответ 3

Я был разочарован той же проблемой: нужно вручную отредактировать settings.xml при роуминге между сетями. На самом деле, я написал плагин Maven, который позволяет автоматически обнаруживать настройки прокси-сервера. Текущая реализация использует библиотеку прокси-полевки, написанную Берндом Росстаушером, для определения настроек прокси-сервера на основе настроек ОС, браузера и среды.

Я только что выпустил исходный код плагина на Github под лицензией Apache 2.0: https://github.com/volkertb/autoproxy-maven-plugin

Приглашаем вас попробовать и посмотреть, соответствует ли оно вашим потребностям. Любые отзывы или вклады приветствуются!

(Примечание: вам необязательно добавлять плагин к вашему проекту POM. Вы также можете вызвать его из командной строки после того, как вы его установили. Подробнее см. README на сайте.)