Maven: разработка с использованием версий SNAPSHOT, но выпуск с фиксированными версиями - PullRequest
2 голосов
/ 08 декабря 2011

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

Рассмотрим следующее дерево зависимостей:

  A --> B --> C
     `--------^

И A, и B зависят от C. По мере развития каждого проекта фиксированные зависимости препятствуют непрерывной интеграции. (Например, если C обновляется с помощью исправления, необходимого для A, зависимость B также должна быть обновлена ​​...) Используя семантическое управление версиями, мы можем поддерживать модули в соответствии с диапазонами версий без постоянной подстройки poms.

[На самом деле этот график более сложный. Нам не нужно объединять все в многомодульный проект (или иным образом объединять их), так как это отрицает модульность. Мы хотим создать модульное программное обеспечение с непрерывной интеграцией .]

Однако развернутые выпуски должны быть неизменяемыми. Версии, от которых они зависят, должны быть зафиксированы в камне, поэтому выпуск, выбранный сегодня (+ его зависимости), такой же, как и в следующем году.

Цели

  • Разработчики работают над выпусками SNAPSHOT (выбирая зависимости SNAPSHOT либо локально, либо из Hudson)
  • Релиз сделан против последних (совместимых) выпущенных версий зависимостей (исключая SNAPSHOTs)
  • Релизы навсегда неизменны. В зависимости от A = 1.0.0 всегда будут вводиться одинаковые версии B и C

Вопросы

  • Какой лучший способ сделать это в Maven? Есть ли ссылки / документы, описывающие этот вариант использования?
  • Может ли плагин релиза maven разрешать диапазоны версий и включать их в релиз?

С учетом

  • По умолчанию maven (3.0.3) выбирает зависимости SNAPSHOT в диапазонах версий.
  • SNAPSHOT и выпуски могут быть развернуты в отдельных репозиториях

Есть ли лучший способ непрерывной интеграции с maven?

1 Ответ

0 голосов
/ 08 декабря 2011

Плагин релиза не будет выпущен, если какие-либо зависимости являются SNAPSHOT. Вот как Maven обеспечивает неизменность релиза. Создайте небольшой многомодульный тестовый проект и запустите на нем плагин релиза. Тогда вы лучше поймете, что это за поведение - это то, что я должен был сделать.

Я работаю над многомодульным проектом с 405 POM, созданным Jenkins и развернутым в Artifactory.

...