2014-09-22 863 views
14

下面是结果MVN -version:Maven的强制更新快照依赖

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和许多其他问题,如果我做

mvn clean -U package 

它应该只是(重新)下载所有的依赖关系。对?那不会发生什么。它下载用于快照依赖关系的元数据,推断(并且错误地),不需要更新。我必须删除Maven的本地.m2存储库中的相关子目录,以便使用-U标志更新远程回购的快照版本。

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

+0

我从来没有与maven 3.0.3的这个问题,但开始得到它在3.2.3就像你所描述的。 :-( – dpetruha 2014-11-25 22:07:02

+0

只是为了检查,你可能想至少尝试复制你的本地.m2文件夹以保存其他地方并清除.m2目录,然后尝试运行全新安装并查看它是否抓取依赖项。只会检查以确保您的设置实际上是正确的,并且您正在为工件提供正确的服务器,以防当前将所有依赖项缓存到本地。 – eisbaer 2016-10-11 18:38:35

+0

[Force maven update](http:// stackoverflow。com/questions/4701532/force-maven-update) – jordiburgos 2016-11-19 10:50:15

回答

-1
mvn clean install -U 

-U表示强制更新相关性。

0

元数据很可能在您下载工件的Nexus或您的本地存储库中损坏。

如果Nexus是你的,我会重建元数据。

0

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

这个blog entry很好地解释了独特和非独特的SNAPSHOT神器之间的区别。

实质上,如果工件元数据出现在连接点作为foo-1.0.4-SNAPSHOT.jar它是非唯一的。如果它显示为foo-1.0.4-20160122.172609-36.jar,它是唯一的。

你可以只有在Maven 3中发布独特的快照构件,但仍然可以解决旧的时间戳非唯一性快照......但它很可能。看看ancient doc,似乎在文件系统日期和本地和远程机器上的metadata.xml之间存在一些模糊不清的交互。基本上:(1)尝试确保您的SNAPSHOT依赖项具有唯一的工件,并且(2)如果它们不是,则不依赖于检测到新的SNAPSHOTs。使用mvn dependency:purge-local-repository与适当的包括从您的本地M2,而不是旧的SNAPSHOTs。