Maven branch update projects version Автоматизация рабочего процесса выпуска

Мне нужно решить трудный случай, связанный с автоматическим управлением версиями проектов Maven, я надеюсь, что найду подходящее решение, основанное на вашем опыте и советах.

Проблема такая: У нас есть огромный java-продукт, состоящий из ~ 200 очень взаимозависимых различных проектов. Мы договорились, что каждый проект нужно разрабатывать независимо, чтобы у каждого из них был свой жизненный цикл. В стадии разработки все работает нормально, проблем нет. Проблема возникает, когда мы готовим релиз для этих проектов: поскольку проектов очень много, ручные изменения доставляют боль, поэтому мы решили найти автоматическое решение для решения процесса выпуска.

Предпосылки таковы: Мы все согласились, что политика выпуска с точки зрения SVN должна быть такой: - вся разработка должна выполняться на магистрали SVN, релизы должны создаваться и поддерживаться в ветвях. Каждый выполненный выпуск должен автоматически создавать тег.

Политика с точки зрения MAVEN такова: - перед выпуском проекта мы сначала копируем транк в ветку, чтобы иметь контроль над сопровождением проектов в разветвленном коде. Выбранная нами система управления версиями: Major.Minor.BuildNumber-SNAPSHOT (например, 1.0.0-SNAPSHOT) . При разветвлении кода мы хотим изменить номер версии проекта, увеличив MinorVersion (например, trunk-1.0.0-SNAPSHOT станет 1.1.0-SNAPSHOT, а 1.0.0-SNAPSHOT будет быть скопированы и выпущены в новой созданной ветке) - когда мы решаем, что проект достаточно зрел для того, чтобы его можно было выпустить, мы выпускаем его, используя maven-release-plugin ( mvn release: clean release: подготовить выпуск: выполнить ) так что наша версия проекта будет преобразована из Major.Minor.BuildVersion-SNAPSHOT (например, 1.0.0-SNAPSHOT) в Major.Minor.BuildVersion (например, 1.0.0) , затем будут подготовлены к следующей итерации разработки, например: Major.Minor.BuildVersion + 1-SNAPSHOT (например, 1.0.1-SNAPSHOT)

Проблемы, с которыми мы сталкиваемся, связаны с управлением версиями проектов.Итак, на этапе разработки основной ветви все проекты используют последние версии SNAPSHOT своих зависимостей ( версии mvn: use-latest-versions -DallowSnapshots = true -DupdateDependencies = true ), но когда мы считайте, что пора начинать процедуру релиза и готовиться к ветвлению кода, тут начинаются проблемы: мы начинаем ветвление

  1. parent-pom

    ( mvn -B release: clean release: branch -DbranchName = $ {project.artifactId} _ $ {project.version} -Dusername = $ {username} - Dpassword = $ {passwd} -Dproject.rel. $ {GroupId}: $ {projectId} = 1.0.0-SNAPSHOT -Dproject.dev. $ {GroupId}: $ {projectId} = 1.1.0-SNAPSHOT )

    • копировать проект из ствола в новую созданную ветку, преобразовывать версию pom на стволе из 1.0.0-SNAPSHOT в 1.1. 0-SNAPSHOT
  2. независимые проекты

    ( mvn -B release: clean release: branch -DbranchName = $ {project.artifactId} _ $ {project.version} -Dusername = $ {username} - Dpassword = $ {passwd} -Dproject.rel. $ {GroupId}: $ {projectId} = 1.0.0-SNAPSHOT -Dproject.dev. $ {GroupId}: $ {projectId} = 1.1.0-Версии SNAPSHOT: update-parent -DallowSnapshots = true )

    • копировать проект из ствола в новую созданную ветку,
    • преобразовывать основной модуль pom версии 1.0.0-SNAPSHOT становится 1.0.1-SNAPSHOT
    • обновлять parent-pom.version: 1.0 .0-SNAPSHOT становятся зависимыми проектами 1.1.0-SNAPSHOT
  3. :

    ( mvn -B release: clean release: branch -DbranchName = $ {project.artifactId} _ $ {project.version} -Dusername = $ {username} -Dpassword = $ {passwd} -Dproject.rel. $ {groupId}: $ {projectId} = 1.0.0-SNAPSHOT -Dproject.dev. $ {GroupId}: $ {projectId} = 1.1.0-SNAPSHOT версии: родитель-обновление -DallowSnapshots = истинные версии: использовать-последние-версии -DallowSnapshots = true -DupdateDependencies = true )

    • копировать проект из ствола в новую созданную ветку
    • преобразовать версию pom на стволе с 1.0.0-SNAPSHOT на 1.1.0-SNAPSHOT
    • обновить родительский pom на стволе с 1.0 .0-SNAPSHOT до 1.1.0-SNAPSHOT
    • обновить уже разветвленные проекты зависимостей с 1.0.0-SNAPSHOT до 1.1.0-SNAPSHOT

. увеличивайте MinorVersion при ветвлении проекта, maven-release-plugin 2.2.2 не увеличивает значение pom MinorVersion в магистрали при ветвлении, поэтому нам нужно использовать -Dproject.отн. $ {groupId}: $ {projectId} = 1.0.0-SNAPSHOT -Dproject.dev. $ {GroupId}: $ {projectId} = 1.1.0-SNAPSHOT аргументы и изменять их вручную для каждого проекта, то есть 200 раз каждый раз, когда мы готовимся к новому выпуску.

Мне интересно, не является ли это способом сделать всю описанную процедуру каким-то образом в автоматическом режиме и не выполнять все эти изменения все время вручную. Мы учли даже модульность этого продукта, чтобы, вероятно, свернуть эти 200 проектов в 100, но это неприемлемо, поскольку идея состоит в том, чтобы иметь мелкозернистое управление версиями проектов и иметь все проекты с собственным жизненным циклом, поэтому агрегатор (Я имею в виду классический) здесь не обсуждается.

Мы используем SVN в качестве VCS, Maven в качестве инструмента сборки (возможно, вы уже догадались об этом :)) и Bamboo в качестве CI-сервера (на самом деле, вместо функции Maven Dependency Processor, Bamboo мне не помогает много о проблеме управления версиями).

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

Спасибо!

7
задан Asgard 17 February 2012 в 08:28
поделиться