想象一下以下情景:
我们在几个svn分支中进行了大量的并行开发。有些项目是不分支的,有些是分支的。有很多相互依赖。我们还有一个本地存储库(因此没有开发人员直接下载软件包,我们使用自己的maven存储库)。
问题在于我们必须在所有pom文件中指定版本。具有该版本的工件存储在我们的本地存储库中。在处理多个分支时,我们将使用来自另一个分支的工件覆盖工件的相同版本(在pom文件中)。
如果我使用pom文件中的版本号也包含一些分支信息,那么依赖于许多分支模块的非分支模块就会出现问题。
是否有任何标准的解决方案/政策可以解决这个问题?
为每个分支创建一个单独的存储库是一个解决方案,但是看看我们可能拥有的分支数量,它有点贵。
答案 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,或者只是非常小心。