Maven: Как обеспечить использование версий снимков с метками времени в classpath? - PullRequest
4 голосов
/ 14 июля 2011

Я бы хотел, чтобы наши функциональные тесты запускались из Maven с использованием версии с метками времени (например, api-0.5.0-20110706.191935-1.jar) снимков в classpath. Однако, хотя я вижу, что у нас есть версии с метками времени, которые находятся в нашем хранилище Artifactory, Maven ссылается на api-0.5.0-SNAPSHOT.jar и разрешает его из локального хранилища.

Фон Наш сервер непрерывной интеграции (CI) имеет две соответствующие сборки. Серверная сборка запускается mvn deploy, а новые снимки появляются в правильно построенном хранилище.

У нас также есть функциональная тестовая сборка, которая получает последнюю правильную сборку, развертывается на сервере разработки и затем запускает тесты для него.

Похоже, что сборка функционального теста основана на API-0.5.0-SNAPSHOT.jar. Когда выполняется сборка сервера, он заменяет снимок в локальном репозитории, и мы начинаем получать ошибки NoClassDeFond из сборки функционального теста.

Следовательно, я хочу, чтобы сборка функционального теста использовала версии с метками времени.

Опции, о которых я сейчас знаю:

  1. Объявите репозиторий моментальных снимков в POM и убедитесь, что uniqueVersion имеет значение true (я скоро запустите сборку, пытаясь это сделать).
  2. Используйте цель version lock:snapshots, чтобы установить версии в pom на версию с меткой времени.
  3. Рассмотрите возможность запуска сборки сервера и функциональных тестов за один вызов с сервера CI. (т.е. удаление сборки Сервера).

1 Ответ

1 голос
/ 14 июля 2011

Вот краткий ответ: не используйте зависимости SNAPSHOT между проектами в вашей сборке CI. Они хороши на вашем локальном компьютере, но среды CI, как правило, не работают хорошо **. Существует опубликованный алгоритм для разрешения SNAPSHOT, но это беспорядок. Вместо этого просто используйте обычные зависимости, и в вашем CI есть задание по выпуску, которое создает выпуски.

Другими словами, SNAPSHOT следует считать по существу недетерминированными (по крайней мере, с точки зрения агента построения CI).

Плагин Versions может быть полезен для отслеживания зависимостей.

** Единственный способ, которым я видел, как это работает последовательно, - это если вы устанавливаете разные репозитории для каждого агента сборки, а затем стираете его между каждым запуском. Резкий, ужасный, неэффективный и ненужный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...