【问题标题】:How to update maven local repository with newer artifacts from a remote repository?如何使用来自远程存储库的较新工件更新 Maven 本地存储库?
【发布时间】:2011-02-04 16:02:37
【问题描述】:

我的 maven 模块 A 依赖于其他人提供的另一个 maven 模块 B。当我第一次在 A 下运行“mvn install”时,maven 将 B-1.0.jar 从远程存储库下载到我的本地 maven 存储库。我的模块 A 构建良好。

与此同时,其他人正在将更新的 B-1.0.jar 部署到远程存储库。当我再次在 A 下运行“mvn install”时,maven 不会将较新的 B-1.0.jar 从远程存储库下载到我的本地存储库。结果,由于 B-1.0.jar 中的 API 更改,我的模块 A 构建失败。

我可以从本地存储库中手动删除 B-1.0.jar。然后 maven 会在我下次运行“mvn install”时从远程存储库下载最新的 B-1.0.jar。

我的问题是如何让 maven 从远程存储库自动下载最新的工件。我试图将 updatePolicy 设置为“始终”。但这并没有奏效。

【问题讨论】:

    标签: maven dependencies


    【解决方案1】:

    Maven 从不重新下载版本 - 1.0 被视为最终版本,新版本应使用新版本。

    如果模块 B 仍在开发中,您应该使用 1.0-SNAPSHOT 版本 - 快照是一个特殊的 Maven 版本,它将检查更新,并在部署时存储时间戳和内部版本号以进行跟踪。

    【讨论】:

    • 这很有帮助。 SNAPSHOT 仅用于此目的。
    • 感谢布雷特的回答 :)
    【解决方案2】:

    我同意上述 Brett 的观点:新版本应该使用新版本。对于您的情况,快照可能是最好的解决方案,但其他可能也有帮助的方法是使用 dependency version ranges。

    因此您可以指定一个版本
    (1.0,)
    声明您接受任何高于 1.0 的版本。
    或
    [1.1.1,1.1.7]
    接受(包括)版本 1.1.1 和 1.1.7 之间的任何内容。
    该符号遵循标准数学区间语法,其中

    [ = 包含在区间中
    ( = 从区间中排除

    (在学校里,我一直认为方括号是“容纳”该元素,而较软的括号“放手”)

    如果您的依赖项仍在频繁开发中,并且您不想依赖可能不太稳定且更有可能破坏您的代码的新快照,这会很有帮助。您可以指定安全范围并随着时间的推移酌情上下调整边界

    【讨论】:

    • 有没有办法排除所有具有该范围定义的新快照?例如我不喜欢 1.1-SNAPSHOT
    猜你喜欢
    • 2021-09-11
    • 2010-11-29
    • 2020-01-09
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多