Как построить без использования локально установленных артефактов
Есть ли способ заставить Maven использовать удаленные артефакты, а не те, которые установлены на вашем компьютере? так как я беспокоюсь об ошибках времени выполнения, а не об ошибках компиляции, сборка сервера недопустима.
PS Я знаю, что могу удалить или переименовать папку.m2, но держу пари, что есть еще более умный способ сделать это. Может быть, какой-нибудь плагин или специальный командный параметр?
2 ответа
Отсутствие локального репозитория будет означать, что ваш classpath почти полностью состоит из URL-адресов на удаленных серверах. Я не могу понять, почему это будет поддерживаться, поскольку выполнение будет ужасным, и любое потерянное соединение приведет к проблемам загрузчика классов. Наличие локального репозитория обеспечивает доступность jar-файлов до начала компиляции / выполнения.
Также учтите, что проекты WAR и EAR (и многие используют плагин зависимостей) полагаются на загрузку jar-файлов для завершения их упаковки. Если бы их нужно было извлекать из удаленного репозитория при каждой сборке, были бы огромные издержки. Я почти уверен, что руководители центральных компаний не захотят справиться с этой нагрузкой.
Некоторые альтернативы для вас, чтобы рассмотреть:
- Если вы хотите принудительно создать чистый локальный репозиторий для каждой сборки, вы можете использовать цель очистки подключаемого модуля зависимостей.
- Если вы хотите сохранить сборки изолированными, вы можете использовать отдельные настройки Maven, передав -Dorg.apache.maven.global-settings=/path/to/global/settings.xml
- В качестве альтернативы вы можете переопределить локальный репозиторий для каждой сборки, передав -Dmaven.repo.local=/some/repo/path
- Если вы хотите избежать попадания в удаленные репозитории при каждой сборке, добавьте
never updatePolicy> в конфигурации вашего удаленного репозитория. Это означает, что Maven будет проверять наличие обновлений только в том случае, если вы принудительно установите его с помощью ключа -U в командной строке. - Если вы хотите получить последнюю версию зависимости, вы можете использовать ключевое слово LATEST в объявлении версии (вместо номера версии), хотя это может быть рискованно, если зависимость несовместима.
- Если вы хотите взять текущую версию зависимости, вы можете использовать ключевое слово RELEASE в объявлении версии (вместо номера версии). Это похоже на ПОСЛЕДНИЕ, но имеет тенденцию быть самой новой стабильной сборкой, а не самой новой.
- Если вы хотите взять последнюю версию зависимости в пределах диапазона, используйте обозначение диапазона версий Maven, например [1.0.0,2.0.0), что означает любую версию от 1.0.0 включительно до 2.0.0 эксклюзивно
Для получения более подробной информации о последних событиях и выпусках см. Раздел 9.3.1.3 книги Maven.
Если вы используете менеджер внутреннего репозитория (здесь обязательные ссылки на Nexus и Artifactory), затраты на очистку локального репозитория значительно уменьшатся - вы просто увеличите нагрузку на локальный сетевой трафик.
Я не думаю, что на самом деле есть способ сделать то, что вы просите. Вы можете изучить зависимость от выпусков SNAPSHOT (но это означает, что нужно изменить строку версии исходных проектов на версии SNAPSHOT).
Кстати, об этом подробно говорилось в недавнем эпизоде Java Posse (# 268). Я не думаю, что они нашли решение, но вы можете получить некоторые хорошие идеи там.
Мне также нравятся некоторые идеи Богатого Продавца, которые я буду изучать сам.