【问题标题】:Maven dependency managementMaven依赖管理
【发布时间】:2010-09-28 12:22:23
【问题描述】:

我们的项目有一个类似的依赖项

  <dependency>
    <groupId>apollo.components.cots</groupId>
    <artifactId>cots-wfs</artifactId>
  </dependency>

据我了解,maven2 将获得 cots-wfs 的最新工件,例如 2.3-20101111.000000-13

问题是,当我们分支项目时,依赖关系保持不变,当其他开发人员发布新的 cots-wfs 时说 2.3-20101222.000000-13 不向后兼容,构建坏了。

我试图避免将代码合并到分支中,这很痛苦。

那么当我分支项目时,我需要做什么来“冻结”所有依赖项? 有什么简单的方法可以做到这一点?

【问题讨论】:

    标签: maven-2 merge branch freeze


    【解决方案1】:

    据我了解,maven2 会得到 cots-wfs 的最新神器,比如&lt;version&gt;2.3-20101111.000000-13&lt;/version&gt;

    看起来您正在为 cots-wfs (2.3-SNAPSHOT) 使用 SNAPSHOT 依赖项,可能在 dependencyManagement 部分中声明。

    问题是,当我们分支项目时,依赖关系保持不变,而当其他开发人员发布不向后兼容的新 cots-wfs (...) 时,构建被破坏。

    确实,这就是为什么您不应该简单地使用 SNAPSHOT 依赖项来分支工件的原因,已发布工件的构建应该是可重复的,并且使用 SNAPSHOT 依赖项可以解决这个问题。 maven 发布插件实际上禁止发布具有 SNAPSHOT 依赖项的 POM。

    但是,可以使用versions:lock-snapshots“锁定”SNAPSHOT 依赖项,或者更好的是,使用versions:use-releases 使用相应的发布版本。这实际上是要走的路。

    顺便说一句,Maven Release Plugin 可能有助于自动化整个过程。

    【讨论】:

    • 感谢您的意见。我将使用版本:锁定快照。使用已发布版本的问题在于它与最新版本非常不同,因为代码正在快速发展。所以我通常在主线分支。
    【解决方案2】:

    当您进行分支时,在某种意义上意味着您正在创建它的新版本。提升版本号应该可以解决。

    【讨论】:

    • 应该提升哪个版本号?如果我提升工件的版本号,依赖项仍然没有冻结,这意味着如果开发人员发布新东西,构建未来版本会出现问题
    【解决方案3】:

    是的,只需将版本标记添加到依赖项。如果您不确定当前版本号是什么,请运行“mvn help:effective-pom”以查看包含所有当前版本号的 pom。

    【讨论】:

    • 拜仁,所以这意味着修改所有依赖的版本标签?
    • 或者复制整个有效的 pom 这对你来说是很多工作。这样你可能会得到一些不需要的配置。
    猜你喜欢
    • 2011-09-11
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2015-10-17
    • 2019-10-16
    • 2013-09-28
    • 2011-04-07
    相关资源
    最近更新 更多