我拥有世界上最简单的Maven / Jenkins / Nexus设置。
Maven每天通过Jenkins运行数十次,并将SNAPSHOT
部署到我们的Nexus存储库中。
每次在蓝色的月亮中,似乎没有原因,运行另一个需要解决SNAPSHOT
s的Maven工作将会失败。在这些极少数情况下,Maven告诉我,它在几个小时之前的许多情况下都无法再找到它上传的SNAPSHOT
。
如果我将我的网络浏览器指向Maven正在使用的存储库位置,我可以很好地找到它们。
在这些错误发生之前,我总是看到(正如我在成功案例中所做的那样)下载了一堆maven-metadata.xml
个文件。据推测,这些文件告诉Maven有关如何采取的方法,例如1.009-SNAPSHOT
并将其转为1.009-somehugetimestamphere
。
(我从来没有找到任何这个文件的文档,它似乎没有将其中包含的任何文件名标记为“最新”或类似的东西。实际上我看不出它是怎么回事任何用途,但显然必须是。)
(我还在调试输出中看到对resolver-status.properties
的各种引用,这似乎是写入本地存储库的另一个未记录的文件,它跟踪与分辨率有关的内容,但我承认我不知道是什么。)
我的主要问题是: Maven是如何完成下载,解析和检查SNAPSHOT
的?假设存储库信息有效(毕竟,这个工作有90%的时间工作,10%的时间没有更改就失败了),Maven采取了哪些步骤与给定的存储库一起找到正确的SNAPSHOT
?
编辑:找到部分文档:http://maven.apache.org/ref/3.0.4/maven-repository-metadata/repository-metadata.html虽然没有解释为什么我在Nexus 2.0中找不到maven-metadata.xml
文件的原因安装中包含<latest/>
元素。它也没有详细说明如何使用这些文件。
我的posting on the users list收到了一些回复,其中一些可能是Nexus问题,因为它可能会也可能不会正确生成这些maven-metadata.xml
文件。
答案 0 :(得分:1)
前几天我遇到了一个非常类似的问题,Nexus服务器代理了另一个存储库。在我的情况下,更改Nexus中的过期设置修复了问题。我减少了&#34;神器最大年龄&#34;和&#34;元数据最大年龄&#34;从1天到1分钟。