【问题标题】:Maven Force Update Snapshot DependenciesMaven 强制更新快照依赖
【发布时间】:2014-11-16 22:52:25
【问题描述】:

这是 mvn -version 的结果:

Apache Maven 3.0.4 (r1232337; 2012-01-17 00:44:56-0800)
Maven home: /usr/share/maven
Java version: 1.7.0_67, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"

假设我有一个快照依赖:

<dependency>
    <groupId>org.puzzled</groupId>
    <artifactId>foo</artifactId>
    <version>1.0.4-SNAPSHOT</version>
</dependency>

我的本​​地存储库中有该快照的下载副本。但是随后其他开发人员进行了改进,并且对 foo-1.0.4-SNAPSHOT.jar 进行了更新。我想向 Maven 发出行政命令,通过从远程存储库下载它来更新该依赖项。

根据对this 的回复以及关于 SO 的许多其他问题,如果我这样做了

mvn clean -U package

它应该只是(重新)下载所有依赖项。正确的?事实并非如此。它下载快照依赖项的元数据,推断(并且错误地)不需要更新。我必须删除本地 .m2 存储库中的关联子目录,以便 Maven 从远程存储库更新快照版本,即使使用 -U 标志也是如此。

这是一个错误,还是我遗漏了什么?

【问题讨论】:

  • 我从来没有遇到过 maven 3.0.3 的这个问题,但是就像你描述的那样,我开始在 3.2.3 中得到它。 :-(
  • 只是为了检查一下,您可能至少要尝试复制本地 .m2 文件夹以保存其他位置并清除 .m2 目录。然后尝试运行全新安装并查看它是否获取依赖项。这只会检查以确保您的设置实际上是正确的,并且您正在为工件访问正确的服务器,以防您当前在本地缓存了所有依赖项。
  • Force maven update的可能重复
  • “我在我的本地仓库中下载了该快照的副本”是什么意思 - 由 maven 在之前的全新安装时下载?还是手动下载?

标签: maven


【解决方案1】:
mvn clean install -U

-U 表示强制更新依赖。

【讨论】:

    【解决方案2】:

    存储库是否有可能使用非唯一的 SNAPSHOT 名称发布您的 foo

    blog entry 很好地解释了唯一和非唯一 SNAPSHOT 工件之间的区别。

    本质上,如果工件元数据以foo-1.0.4-SNAPSHOT.jar 出现在 nexus 上,则它是非唯一的。如果它显示为foo-1.0.4-20160122.172609-36.jar,则它是唯一的。

    您可以在 Maven 3 中发布独特的快照工件,但仍然可以解决旧的时间戳非唯一快照...但它非常不确定。查看ancient doc,文件系统日期与本地和远程计算机上的 metadata.xml 之间似乎存在一些不清楚和模糊的交互。

    本质上:(1) 尝试确保您的 SNAPSHOT 依赖项与唯一的工件一起发布,以及 (2) 如果不是,不要依赖于检测到的新 SNAPSHOT。使用 mvn dependency:purge-local-repository 和适当的 include 从您的本地 m2 中删除旧的 SNAPSHOT。

    【讨论】:

      【解决方案3】:

      我使用这个 shell 脚本解决了这个问题:

      # Get path to local maven repo...
      MVN_REPO=$(mvn help:evaluate -Dexpression=settings.localRepository | grep -e '^/')
      
      echo "Local Maven repository is here: $MVN_REPO"
       
      # Remove SNAPSHOT versions in "com/github/myusername" sub directory...
      find "$MVN_REPO/com/github/myusername" -name *-SNAPSHOT.jar -exec rm {} \;
      

      它会在本地 maven 存储库中查找特定组 id 以 -SNAPSHOT.jar 结尾的所有 jar 文件并将它们删除。

      然后可以使用以下命令成功触发构建:

      mvn clean -U package
      

      也许有人觉得它有用。

      【讨论】:

        猜你喜欢
        • 2021-02-16
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2017-02-22
        • 1970-01-01
        • 2015-12-22
        • 1970-01-01
        • 2011-01-10
        相关资源
        最近更新 更多