Ответ
Для сборки в изолированных или высокозащищенных средах мы настраивали полностью оффлайн-работу Maven. Вот практический подход:
1. Подготовка локального репозитория:
Сначала на машине с доступом в интернет нужно заполнить локальный кэш (~/.m2/repository) всеми необходимыми зависимостями.
# Скачивает все зависимости и плагины проекта
mvn dependency:go-offline
# Дополнительно: для многомодульных проектов лучше выполнить полную сборку
mvn clean compile dependency:go-offline
После этого всю папку .m2/repository можно архивировать и перенести в изолированную среду.
2. Использование локального прокси-репозитория (рекомендуемый способ): Мы разворачивали Nexus Repository Manager в изолированном контуре.
- Настраивали репозитории
maven-central(proxy),releases(hosted),snapshots(hosted). - На машине-доноре выполняли синхронизацию, чтобы Nexus закешировал все артефакты.
- В изолированной среде разработчики и CI-сервер настраивали
settings.xmlна использование только этого Nexus.
Пример settings.xml для оффлайн-работы через Nexus:
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<name>Corporate Nexus</name>
<url>http://internal-nexus:8081/repository/maven-group/</url>
<mirrorOf>*</mirrorOf> <!-- Все запросы идут в наш Nexus -->
</mirror>
</mirrors>
</settings>
3. Запуск сборки в оффлайн-режиме:
В CI-скрипте или при локальной сборке используется флаг -o (или --offline).
mvn -o clean package
Maven будет искать зависимости только в локальном репозитории (кэше или Nexus) и не станет пытаться выйти в интернет.
4. Критически важные моменты из практики:
- Плагины: Команда
dependency:go-offlineне всегда скачивает все плагины. Нужно убедиться, что вpom.xmlу всех плагинов указаны конкретные версии, и провести пробную оффлайн-сборку для их кэширования. - Локальная установка артефактов: Для внутренних библиотек, которых нет в публичных репозиториях, использовали
mvn installдля их размещения в локальном.m2перед переходом в оффлайн. - Идемпотентность: Конфигурация
settings.xmlи набор зависимостей должны быть одинаковыми на всех машинах, чтобы избежать проблем сchecksum.