Сделать настройки 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 на сайте.)