Для любого умеренно сложного программного проекта вы можете быстро получить сложные цепочки зависимостей.
Рассмотрим следующее дерево зависимостей:
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?