【问题标题】:Force Maven to use local copy of single snapshot dependency强制 Maven 使用单个快照依赖项的本地副本
【发布时间】:2019-02-23 11:39:26
【问题描述】:

我的 Maven 项目有 2 个快照依赖项。我需要远程仓库中可用的依赖项 A 的最新快照,同时需要本地 ~/.m2 仓库中可用的快照依赖项 B 的版本。

快照依赖 B 也在远程仓库中,但我的 CI 工作需要使用此快照依赖的本地构建实例。因此,快照上没有时间戳,所以它的文件路径是~/.m2/repository/groupId/artifactId/1.0.0-SNAPSHOT/artifactId-1.0.0-SNAPSHOT.tar.gz

由于拆分要求,--no-snapshot-updates 和配置 settings.xml 等解决方案无法解决问题。

有什么建议吗?

更新:如果本地生成的快照少于 24 小时,则默认情况下此方法有效。我不确定我在最初的实验中配置错误。事实证明,使用快照 B 的本地版本,因为它的文件系统上次更新时间不到 24 小时。快照 A 在本地 repo 中不存在,因此它按预期从远程 repo 中获取。

【问题讨论】:

  • 说实话我不明白这个问题?这是多模块构建吗?还是这两个不同的独立项目相互依赖?如果您使用的是 Jenkins,您可以在构建期间存储工件,但这听起来像是您的项目架构的一个真正问题?
  • 我的回答对你有帮助吗?

标签: java maven continuous-integration dependency-management snapshot


【解决方案1】:

试试timestamp,版本可以用1.0.0。

查看这篇文章: How do I add time-stamp information to Maven artifacts?

【讨论】:

  • 不幸的是,<finalName> 不会影响工件在本地 ~/.m2 存储库中的存储。 [INFO] Installing /Users/jhilborn/test/target/artifactId-1.0.0-SNAPSHOT-2019-02-06T22:14:48Z-PLEASE-WORK.jar to /Users/jhilborn/.m2/repository/groupId/artifactId/1.0.0-SNAPSHOT/artifactId-1.0.0-SNAPSHOT.jar ~/.m2 子目录中随附的元数据文件也不包含带时间戳的名称或 PLEASE-WORK 后缀。
【解决方案2】:

我会通过添加后缀来更改 B 的版本:当 B 现在是 2.0.0-SNAPSHOT 时,将其改为 2.0.0-LOCAL-SNAPSHOT。如果您通过此版本构建和引用 B,则可以确保没有远程版本的 B 会干扰您的构建。

【讨论】:

  • 不幸的是,这种方法不适用于我的用例,因为我需要将工件部署到 Nexus 并使用安装到本地 ~/.m2 存储库的相同工件。
【解决方案3】:

如果本地生成的快照少于 24 小时,则默认情况下此方法有效。我不确定我在最初的实验中配置错误。事实证明,使用快照 B 的本地版本,因为它的文件系统上次更新时间不到 24 小时。快照 A 在本地 repo 中不存在,因此它按预期从远程 repo 中获取。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2021-04-07
    • 2014-03-27
    • 2021-02-16
    相关资源
    最近更新 更多