Версии Maven, ветки Subversion и локальный репозиторий - PullRequest
4 голосов
/ 09 июля 2009

Представьте себе следующий сценарий:

У нас много параллельной разработки в нескольких ветках SVN. Некоторые проекты не разветвлены, а некоторые разветвлены. Существует много взаимозависимости. У нас также есть локальный репозиторий (поэтому ни один из разработчиков не загружает пакеты напрямую, мы используем наш собственный репозиторий maven).

Проблема в том, что с maven мы должны указывать версии во всех файлах pom. Артефакты с версией хранятся в нашем локальном хранилище. При работе с несколькими ветками мы переопределим одну и ту же версию (в файле pom) артефактов с артефактами из другой ветви.

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

Существует ли какое-либо стандартное решение / политика для решения этой проблемы?

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

Ответы [ 3 ]

6 голосов
/ 10 июля 2009

Не могли бы вы использовать функцию классификатора для вашего артефакта?

Я не думаю, что это СОП, использовать классификатор для этого, но он должен работать. Я полагаю, что цель классификатора состоит в том, чтобы создать разные версии артефакта на основе фильтров, специфичных для региона, версий JDK и т. Д. Но это, похоже, очень специфичная вещь для проекта / среды, поэтому я думаю, что было бы неплохо использовать ее для этой цели ,

Если указать такие артефакты, как это:

<artifactId>artifact-a</artifactId>
<groupId>com.mygroup</groupId>
<version>1.1-SNAPSHOT</version>
<classifier>BRANCH-Q</classifier>

В вашем хранилище вы получите:

artifact-a-1.1-SNAPSHOT-BRANCH-Q.jar

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

1 голос
/ 09 июля 2009

Я думаю, что ваш подход к добавлению имени ветки в версию правильный.

Однако следует избегать неразветвленных артефактов в зависимости от разветвленных версий.

Предположим, у вас есть A в транке, что зависит от версии B в ветви под названием DEV.

В этом случае я бы сказал, что либо A должно зависеть от выпущенной версии B в транке, либо должно быть в самой ветви DEV.

Надеюсь, что это имеет смысл ...

0 голосов
/ 10 июля 2009

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

Вы также можете использовать схему нумерации для разграничения ветвей. Например, если транк является версией 2.0 (следующий основной выпуск), тогда ветвь может быть 1.1 (выпуск для предыдущего выпуска).

Я не уверен, что вы подразумеваете под "нашим локальным хранилищем". Если вы имеете в виду общий внутренний репозиторий группы / компании, то вы, конечно же, хотите избежать коллизий версий в разных ветвях, в противном случае вы получите очень странные проблемы со сборкой с разными артефактами, имеющими одинаковое имя / версию.

Если разработчики работают ТОЛЬКО над ветвями в своих локальных репозиториях, и эти разветвленные артефакты не добавляются в какой-либо общий репозиторий (например, через некоторый CI-сервер), тогда у вас должно быть все в порядке.

Вы также должны быть осторожны с разветвленными проектами в зависимости от общих артефактов.

Предположим, у вас есть A (транк) и B (ветвь), оба зависят от C. Если вы сделаете изменение в C, чтобы поддержать изменения в B, то на A повлияет. В этой ситуации вам нужно разветвляться или просто быть очень осторожным.

...