В каком порядке maven находит свои зависимости?

У меня есть многомодульный проект, в котором используются военные оверлеи и у нас есть сервер непрерывной интеграции, который часто развертывает моментальные снимки. У меня есть вопросы, например, если я выполню mvn compile сразу после того, как сервер CI выполнит его развертывание, получат ли моя сборка мои локальные изменения или изменения CI? Как заставить мой проект использовать оверлей войны, который я изменил локально? Я полагаю, что install может это сделать, но что, если сервер CI создаст версию с более новой меткой времени. Какой из них будет использоваться?

Это всего лишь несколько из многих вопросов, которые у меня есть, и я не могу найти авторитетный ответ в документации maven. Но даже если бы я мог, я бы, вероятно, вернулся сюда и попросил кого-нибудь лучше объяснить документацию: P Итак, я спрашиваю, какой порядок/логика использует maven для поиска своих зависимостей?


person Daniel Kaplan    schedule 11.06.2013    source источник


Ответы (2)


Что касается Maven, артефакт, сгенерированный из ваших наложений войны, будет просто еще одним артефактом.

если я сделаю компиляцию mvn сразу после того, как сервер CI выполнит его развертывание, получит ли моя сборка мои локальные изменения или изменения CI?

Это будет зависеть от ваших снимков updatePolicy в вашем файле настроек. По умолчанию установлено ежедневно. Подробнее здесь: http://maven.apache.org/settings.html#Repositories

Как заставить мой проект использовать оверлей войны, который я изменил локально?

Измените updatePolicy моментальных снимков на никогда (или параметр -o, предложенный @matsev). Это означает, что используемые вами зависимости SNAPSHOT всегда будут локальной версией. Чтобы принудительно получить последнюю версию из репозитория с этой политикой обновления, используйте параметр -U.

Я полагаю, что это может сделать установка, но что, если сервер CI создаст версию с более новой отметкой времени. Какой из них будет использоваться?

Да, install в основном развернет ваш артефакт в локальном репозитории (папка .m2). Затем, в зависимости от updatePolicy, maven сравнит локально развернутый артефакт и артефакт репозитория. Если для updatePolicy задано значение всегда, maven будет всегда извлекать репозиторий по одному, если у него более новая отметка времени. То же самое относится к ежедневно, за исключением того, что maven будет сравнивать только отметку времени ежедневно.

Я не могу найти авторитетный ответ в документации maven.

Полностью согласен. К сожалению, я понимаю большинство из них частично на собственном опыте.

person ceilfors    schedule 12.06.2013
comment
Просто для ясности: вы говорите, что я получу module с сервера CI, а не из своей локальной среды, если updatePolicy будет always, а CI имеет более новую версию? Просто хочу убедиться, что modules действует так же, как dependencies таким образом. Потому что, если бы maven always использовал локальную версию modules, это, вероятно, было бы лучше. - person Daniel Kaplan; 12.06.2013
comment
Пожалуйста, ответьте на этот вопрос здесь: stackoverflow.com/questions/17073441/ Спасибо. - person Daniel Kaplan; 12.06.2013

Вы можете использовать параметр -o (--offline), чтобы заставить Maven использовать ваши локальные файлы, например.

mvn -o clean install 

См. Параметры командной строки Maven для справки (или просто выполните mvn -h).

person matsev    schedule 11.06.2013
comment
Это полезная информация, и я, вероятно, воспользуюсь ею в будущем. Но это не прямой ответ на мой вопрос. - person Daniel Kaplan; 11.06.2013