强制更新Maven快照依赖项

23

这是运行 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发出执行命令,从远程存储库下载并更新该依赖项。

根据这个和许多其他SO上的问题的回答,如果我这样做

mvn clean -U package

它应该只是重新下载所有依赖项。对吧?但事实并非如此。它会下载快照依赖项的元数据,并推断(而且是错误的),认为不需要更新。我必须删除本地 .m2 存储库中关联的子目录,才能使用 -U 标志从远程存储库更新快照发布。

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


我从来没有在 Maven 3.0.3 中遇到过这个问题,但在 3.2.3 中开始出现了你描述的情况。 :-( - dpetruha
为了确认一下,您可能至少想尝试复制本地的 .m2 文件夹并保存到其他位置,然后清空 .m2 目录。然后尝试运行全新的安装程序,看看它是否会获取依赖项。这只是为了检查您的设置是否正确,并且在当前所有依赖项都被本地缓存的情况下,您是否正在访问正确的服务器以获取构件。 - eisbaer
可能是Force maven update的重复问题。 - jordiburgos
“我有一个本地仓库中的快照的下载副本”这句话是什么意思 - 是在之前的clean-install时由Maven自动下载的,还是手动下载的? - PaoloC
3个回答

11
mvn clean install -U

-U 表示强制更新依赖项。


9

仓库是否可能使用非唯一的SNAPSHOT名称来发布您的foo

这篇博客文章很好地解释了唯一和非唯一快照构件之间的区别。

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

Maven 3只能发布唯一的快照构件,但仍然可以解析旧的时间戳非唯一快照构件...但这还是有些棘手的。根据古老文档,似乎在本地和远程机器上,文件系统日期和metadata.xml之间存在一些不清晰和模糊的交互作用。

因此:(1)尽量确保您的SNAPSHOT依赖项使用唯一的构件进行发布,(2)如果没有,请勿依赖于新的SNAPSHOT被检测到。使用mvn dependency:purge-local-repository和适当的包含来从本地m2中删除旧的SNAPSHOT。


0

我用这个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仓库中查找所有以-SNAPSHOT.jar结尾的特定组ID的jar文件,并将其删除。

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

mvn clean -U package

也许有人会觉得这个有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接