首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven分支更新项目版本自动化发布工作流

Maven分支更新项目版本自动化发布工作流
EN

Stack Overflow用户
提问于 2012-01-30 09:35:53
回答 1查看 2.4K关注 0票数 7

对于Maven自动化项目版本控制,我有一个很难解决的问题,我希望我能根据您的经验和建议找到一个合适的解决方案。

问题是这样的:我们有一个庞大的、由200个非常相互依存的不同项目组成的mavenized产品。我们一致认为每个项目都应该独立开发,这样每个项目都应该有自己的生命周期。在发展阶段一切都很好,没有问题。当我们为这些项目准备发布时,问题就出现了:因为项目太多了,手工更改很痛苦,所以我们决定找到一个自动化的解决方案来解决发布过程。

前提是:我们都同意,从SVN的角度来看,发布策略应该是这样的:-所有的开发都应该在SVN主干上执行,发行版应该在分支上创建和维护。每个执行的版本都应该自动创建一个标记。

从MAVEN的角度来看,策略是这样的:-在发布项目之前,我们首先将主干复制到一个分支,以便控制分支代码上的项目维护。我们选择的版本控制系统是:Major.Minor.BuildNumber-SNAPSHOT (例如1.0.0-快照)。在分支代码时,我们希望通过增加MinorVersion来更改项目版本号(例如主干-1.0.0-快照将变成1.1.0-快照,1.0.0-快照将复制并在新创建的分支上发布) Major.Minor.BuildVersion-SNAPSHOT -当我们决定项目已经足够成熟以便发布时,我们将使用maven发布插件(mvn发行版:mvn发布:准备发布:执行)将项目版本从(例如1.0.0-快照)转换为Major.Minor.BuildVersion (例如1.0.0),然后将为下一次开发迭代做准备,如:Major.Minor.BuildVersion+1-SNAPSHOT (例如1.0.1-快照)

我们所面临的问题与项目版本控制有关。因此,在主干的开发阶段,所有项目都使用它们依赖项的最新快照版本(mvn版本:使用最新版本的-DallowSnapshots=true -DupdateDependencies=true),但是当我们考虑开始发布过程并准备分支代码时,就会出现问题:我们正在开始分支。

  1. 父母-pom

( -DbranchName=${project.artifactId}_${project.version} mvn -B发行版:-B: -Dusername=${username} -Dpassword=${passwd} -Dproject.rel.${groupId}:${projectId}=1.0.0-SNAPSHOT -Dproject.dev.${groupId}:${projectId}=1.1.0-SNAPSHOT)

代码语言:javascript
复制
- copy project from trunk to new created branch, transform pom version on trunk from 1.0.0-SNAPSHOT to 1.1.0-SNAPSHOT

  1. non-dependent项目

( -DbranchName=${project.artifactId}_${project.version} mvn -B发行版:发行版:分支-DallowSnapshots=true) -Dusername=${username} -Dpassword=${passwd} 版本:update-父-DallowSnapshots=true)

代码语言:javascript
复制
- copy project from trunk to new created branch, 
- transform the trunk pom version 1.0.0-SNAPSHOT become 1.0.1-SNAPSHOT
- update parent-pom.version: 1.0.0-SNAPSHOT become 1.1.0-SNAPSHOT

  1. 依赖项目:

( -DbranchName=${project.artifactId}_${project.version} mvn -B发行版:发行版:分支-DupdateDependencies=true) -Dusername=${username} -Dpassword=${passwd} -B版本:update-parent -DallowSnapshots=true versions:use-最新版本-DallowSnapshots=true -DupdateDependencies=true))

代码语言:javascript
复制
- copy project from trunk to new created branch 
- transform pom version on trunk from 1.0.0-SNAPSHOT to 1.1.0-SNAPSHOT
- update parent-pom on trunk from 1.0.0-SNAPSHOT to 1.1.0-SNAPSHOT
- update the already branched dependency projects from 1.0.0-SNAPSHOT to 1.1.0-SNAPSHOT

这里的第一个问题是,还没有办法在分支项目时增加MinorVersion,maven发布插件2.2.2在分支时不会增加主干上的pom MinorVersion,所以这就是为什么我们需要使用MinorVersion参数并为每个项目手动更改它们,所以每次我们为一个新版本准备200次。

我想知道这是否不是一种以自动化的方式使所有描述的过程都以某种方式进行的方法,并且不需要一直手动执行所有这些更改。我们甚至已经考虑到模块化这个产品,这样就可以在100个项目中复制这200个项目,但是这是不能接受的,因为我们的想法是拥有一个细粒度的项目版本化,并且拥有它自己的生命周期的所有项目,所以这里不再讨论聚合器(我指的是一个经典的项目)。

我们使用SVN作为VCS,Maven作为构建工具(可能您已经知道了: ),使用竹作为CI服务器(实际上,它没有使用"Maven依赖处理器“功能,在版本控制问题上对我帮助不大)。

为了找到解决这个问题的适当方法,你们有什么想法吗?也许另一个插件会有帮助(版本-maven- plugin不会在分支时自动更改版本),也许对这个问题的另一个观点,我不知道.,任何帮助或建议都是受欢迎的。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-25 07:41:04

我尽量避免将内部项目版本保存在父-pom的<properties>部分中,因为每次发布项目时,<version>${project.version}</version>变量都将与项目的显式版本一起切换,如下所示:

代码语言:javascript
复制
<properties>
        <project_A.version>1.0.0-SNAPSHOT</projectA.version>
</properties>

存储在父pom中,在项目pom中翻译为:${project.version},将在发布该项目时成为1.0.1快照,并覆盖来自父-pom <properties><project_A.version>版本。因此,将项目版本作为属性保留在类似父-pom的集中位置的技巧,只要不发布项目,就会有效。这是一个与分支问题严格相关的问题。

现在,如果您想要我告诉您更多关于使用这个<properties>替换发布项目的信息:假设您想要发布您的project_A,那么当您开始发布父pom时,您将如何处理存储在父pom <properties> (这是一个-SNAPSHOT版本)中的<projectA.version>呢?我的意思是,为了发布一个项目,您将首先发布它的所有依赖项及其相关的父-pom,对吗?否则,项目发布将失败,因为它指向父pom的-SNAPSHOT版本。现在,您正在发布父版本pom,将-SNAPSHOT版本的project_A保存在它的<properties>中,接下来,当您发布project_A时,您的项目将引用新创建的父pom发布版本,哪个父pom发布的版本引用的是project_A的-SNAPSHOT版本,这仍然不是问题,因为您的父pom保留了project_A的真实版本,直到您的projectA发布版本(比如1.0.0)将引用相同的父pom发布版本,其中包含1.0.0快照版本的project_A,而现在您已经遇到了问题,因为您的父pom <properties>保存了错误的信息。当然,您可以在发布父pom并存储project_A的发布版本时对其进行黑客攻击,但这违反了规则--我完全不同意这一点,另外还有其他一些情况,即这种“黑客”会造成比帮助更多的问题。

如果这听起来非常复杂和详细,我很抱歉,但我只想尽可能多地解释现实生活中的情况,而不仅仅是理论上的,而且我还需要记住,我有一些200+项目,我需要保持某种程度的一致。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9061829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档