2009-07-09 98 views
4

想象以下场景:Maven的版本,颠覆分支机构和本地资源库

我们有几个SVN分支去了很多并行发展的。有些项目没有分支,有些项目是分支的。有很多相互依赖性。我们也有一个本地存储库(所以没有开发者直接下载包,我们使用我们自己的maven仓库)。

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

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

有没有解决这个问题的标准解决方案/政策?

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

回答

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

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

但是,您应该尝试避免具有分支的文件,具体取决于分支版本。

考虑你有一个中继线,它取决于名为DEV的分支中的B版本。

在这种情况下,我会争辩说要么A应该取决于在trunk中发布的B版本,要么应该在DEV分支本身。

希望这是有道理的......

+0

你说得对,但我们已经有了这样的依赖关系,并且消除这种依赖关系是很多工作。一些模块已经取决于分支的东西,并且很难跟踪pom文件中的依赖关系。 – rangalo 2009-07-09 13:06:07

0

我不知道一个标准的方法来此的。一般来说,通过在版本号后添加不同的内容来区分分支是最容易的,或者可能是artifactID。

您也可以使用编号方案来区分分支。例如,如果中继是版本2.0(下一个主要版本),那么分支可能是1.1(前一版本的维护版本)。

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

如果开发人员仅在其本地存储库上工作,并且这些分支工件未被添加到某个共享存储库(例如,通过某个CI服务器),那么您通常应该可以。

根据共享工件,您还必须小心分支项目。

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