Как Maven разрешает зависимости SNAPSHOT, когда в локальном и удаленном репозиториях есть SNAPSHOTS с разными временными метками?

Скажи у меня есть проект A в разработке, которая зависит от проекта B - который также в настоящее время находится в разработке и еще не выпущен.

Итак, в APOM файл, у меня есть следующий раздел:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>project-b</artifactId>
  <version>1.0.0-SNAPSHOT</version>
<\dependency>

На работе у нас есть удаленное репо (Nexus) и окно CI (под управлением Jenkins).

Когда мой коллега вносит изменения в B и передавая в SVN, Дженкинс выберет это изменение, скомпилирует и поместит в удаленное хранилище. Примерно в то же время я мог бы открыть B локально внесите изменения, скомпилируйте и установите в мое локальное хранилище.

Как теперь решает Maven B когда я пытаюсь mvn clean installA на местном уровне?

  • Всегда ли он будет по умолчанию для моего локального SNAPSHOT, если найдет его?
  • Всегда ли это будет по умолчанию для удаленного SNAPSHOT?
  • Будет ли это смотреть на отметки времени?
  • Будет ли это делать что-то другое?

На днях мы немного запутались, и в основном пришлось вручную удалить локальные репозитории, чтобы убедиться, что мы получили версию, которую ожидали получить. Поэтому я сейчас пытаюсь понять, что на самом деле произошло. (Поэтому, если у вас есть ссылки на места в документах, которые подробно описываются, это тоже будет высоко ценится...) Локально, у меня иногда есть несколько сборок SNAPSHOT в моей папке репозитория, одна без, а некоторые с чем-то выглядит как метка времени после SNAPSHOT часть имени файла...

1 ответ

Решение

Артефакты, которые вы просто mvn install не получай метку времени Отметка времени применяется, как только вы mvn deploy в ваш внутренний / удаленный репозиторий. Если вы посмотрите в maven-metadata-local.xml в вашем местном ~/.m2/repository/B/1.0.0-SNAPSHOT/ папка, в которой вы увидите строки:

<updated>YYYYMMDDHHMMSS</updated> 

Вот как решатель зависимостей Maven решает, какой будет последний снимок.

Если случится так, что вы и ваш коллега развернете свой внутренний / удаленный репозиторий в течение одной и той же секунды, то это должен сделать менеджер репозитория - Nexus в вашем случае - для этого.

Обратите внимание: параграфы выше основаны на моем опыте работы с Maven, так как я не видел страницу документов, где это описано во всех деталях. Входные данные, где можно найти ссылку, а также дополнения и исправления, очень приветствуются.

См. Maven / Введение в репозитории для обзора.

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

"Метка времени после части имени файла SNAPSHOT" необычна для меня. AFAIHS это либо один, либо другой только. Хотя это может произойти, если есть "-SNAPSHOT" в <artifactId> в POM вашего проекта.

ОБНОВИТЬ

Смотрите также:

  • Репозиторий - SNAPSHOT Handling, который гласит:

    Эта документация была нацелена на Maven 2.0 alpha 1. Она предназначена только для исторической справки и должна быть обновлена ​​и интегрирована в документацию Maven.

    но я не нашел какой-либо последней документации, где это было интегрировано.

  • Понимание номеров версий Maven.

Другие вопросы по тегам