【问题标题】:Distinguishing maven releases/snapshots from trunk than the ones from branches when getting latest dependencies获取最新依赖项时,区分来自主干的 Maven 版本/快照与来自分支的版本/快照
【发布时间】:2013-03-04 20:37:20
【问题描述】:

我正在致力于为大量相互依赖的模块自动发布 maven 的项目。首先,该任务涉及获取内部依赖项的最新版本。而不是以每个项目在需要之前构建的方式对构建进行排序。希望这种组合能让我实现一键批量发布的目标。

但是我最大的问题是: 我们不时分支项目,并从该分支向 Nexus 存储库管理器发布/快照。显然,因为 groupId 和 ArtifactId 与主干相同 - 来自主干的快照/发布和来自分支的快照/发布最终位于 nexus 中的同一位置。

在我们有一个主干版本为 1.1.x 的 projectA 的场景中 和 projectB → projectA 版本 1.1.x 因此,如果我使用 version-plugin 获取 B 的最新依赖项,我将获得最新的。 (完美)

但是,如果我稍后使用 1.2.0 版本对 ProjectA 进行分支并添加我不希望 projectB 获取或可能破坏它的更改。 现在下次我运行 projectB 并使用版本插件获取最新的,插件将获取 ProjectA 的分支版本(1.2.0),因为它在数字上是最新的。就这样,projectB 构建失败了。

到目前为止,我已尝试向工件添加分类器以区分两者,但后来我意识到插件不会对分类器起作用。

这让我非常沮丧,如果有任何提示或建议,我将不胜感激

【问题讨论】:

    标签: maven maven-2 maven-3 nexus artifactory


    【解决方案1】:

    简单地为分支使用正确/不同的工件名称。您可以自动创建正确的工件名称Maven Release plugin

    mvn --batch-mode release:branch -DbranchName=my-branch-1.2 -Dproject.rel.org.myCompany:projectA=1.2 -Dproject.dev.org.myCompany:projectA=2.0-SNAPSHOT
    

    【讨论】:

    • 您好,感谢您抽出宝贵时间回复。我已经考虑过在不同的 groupId 下发布分支,但是因为这将使它成为不同的工件,我的团队领导不喜欢那样。还有其他解决方案吗?谢谢
    【解决方案2】:

    解决此问题的典型方法是使用分支名称作为版本分类器,该方法适用于我目前看到的所有场景。你遇到了什么问题?

    【讨论】:

    • 很好的建议,这是我的第一颗子弹。但是当我尝试自动获取内部依赖项的最新版本时,我的问题就开始了。我正在为该工作使用版本插件。我的测试表明,该插件用最新的版本号替换了版本号,即使它与指定的分类器不对应。然后,显然 maven 无法使用该 GAV 和分类器从本地存储库中解决问题。该插件在评估时会忽略分类器过滤器(非常令人失望)。我需要为我的内部依赖项选择最新版本
    • 是的.. 版本插件的自动化需要您更严格地控​​制它,而不是依赖于计算的默认值。但是你可以使用例如用于执行版本更新的外部脚本,您可以在其中设置 newVersion 参数,从而确保分类器不会丢失。或者您甚至可以修补插件以支持分类器您希望它如何工作或创建您自己的自定义分支。所有这些都比尝试其他东西更好。
    • 感谢 Manfred,我一直想写一些脚本甚至自己的插件来完成这项工作。但我完成这件事的时间有限。我希望应该有人曾经在这条路上走过并有一个解决方案,因为我认为这是一个常见的障碍。我对这种限制感到非常惊讶。我什至尝试了版本范围的分类器方法,结果与版本插件相同。 Maven 只是忽略了分类器。
    • 嗯.. 你的分支分类快照版本怎么样。我知道这很有效,因为我过去曾多次使用过它..
    • 例如工作版本字符串将是 1.2.3-branchb-SNAPSHOT,它的获取方式与 1.2.3-branchb-SNAPSHOT 不同。如果您在我们所有的模块中使用它,就永远不会混淆它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多