【问题标题】:Maven versions, subversion branches and local repositoryMaven 版本、subversion 分支和本地存储库
【发布时间】:2010-11-09 08:06:13
【问题描述】:

想象以下场景:

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

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

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

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

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

【问题讨论】:

    标签: svn maven-2 build-process


    【解决方案1】:

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

    我不认为为此使用分类器是 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
    

    然后您可以使用分类器在依赖项中指定工件以获得正确的工件。

    【讨论】:

      【解决方案2】:

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

      但是,您应该尽量避免根据分支版本产生未分支的工件。

      假设您在主干中有 A,它依赖于名为 DEV 的分支中的 B 版本。

      在这种情况下,我认为 A 应该依赖于主干中 B 的发布版本,或者应该在 DEV 分支本身中。

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

      【讨论】:

      • 你是对的,但是我们已经有了这样的依赖关系,要删除这些依赖关系需要做很多工作。一些模块已经依赖于分支的东西,并且很难跟踪 pom 文件中的依赖关系。
      【解决方案3】:

      我不知道对此的标准方法。通常,通过在版本号或可能的工件ID 上附加一些不同的东西来区分分支是最简单的。

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

      我不确定您所说的“我们的本地存储库”是什么意思。如果您指的是共享的内部团队/公司存储库,那么您一定要避免不同分支之间的版本冲突,否则您会遇到非常奇怪的构建问题,因为不同的工件具有相同的名称/版本。

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

      您还必须小心依赖共享工件的分支项目。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        相关资源
        最近更新 更多