Maven版本,subversion分支和本地存储库

时间:2009-07-09 10:21:02

标签: svn maven-2 build-process

想象一下以下情景:

我们在几个svn分支中进行了大量的并行开发。有些项目是不分支的,有些是分支的。有很多相互依赖。我们还有一个本地存储库(因此没有开发人员直接下载软件包,我们使用自己的maven存储库)。

问题在于我们必须在所有pom文件中指定版本。具有该版本的工件存储在我们的本地存储库中。在处理多个分支时,我们将使用来自另一个分支的工件覆盖工件的相同版本(在pom文件中)。

如果我使用pom文件中的版本号也包含一些分支信息,那么依赖于许多分支模块的非分支模块就会出现问题。

是否有任何标准的解决方案/政策可以解决这个问题?

为每个分支创建一个单独的存储库是一个解决方案,但是看看我们可能拥有的分支数量,它有点贵。

3 个答案:

答案 0 :(得分:6)

您可以为工件使用分类器功能吗?

我认为使用分类器不是SOP,但它应该有效。我相信分类器的意图是根据区域特定的过滤器,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 :(得分:1)

我认为您在版本中添加分支名称的方法是正确的。

但是,您应该尽量避免使用不分支的工件,具体取决于分支版本。

考虑你在主干中有A,它依赖于名为DEV的分支中的B版本。

在这种情况下,我认为A应该取决于主干中B的发布版本,否则应该在DEV分支本身。

希望有意义......

答案 2 :(得分:0)

我不知道对此采用标准方法。通常,通过附加与版本号不同的东西或者可能是artifactID来区分分支是最容易的。

您还可以使用编号方案来区分分支。例如,如果主干是版本2.0(下一个主要版本),则分支可以是1.1(先前版本的维护版本)。

我不确定“我们的本地存储库”是什么意思。如果您的意思是共享的内部团队/公司存储库,那么无论如何您都希望避免跨不同分支的版本冲突,否则您将会遇到具有相同名称/版本的不同工件的非常奇怪的构建问题。

如果开发人员只在他们的本地存储库上工作分支,并且这些分支工件没有被添加到某个共享存储库(例如,通过某个CI服务器),那么通常你应该没问题。

您还必须注意分支项目,具体取决于共享工件。

假设您有A(主干)和B(分支)两者都取决于C.如果您在C中进行更改以支持B中的更改,则A将受到影响。在这种情况下你必须分支B,或者只是非常小心。