2009-06-12 66 views
4

我试图将第三方库的快照版本部署到我们的本地回购(出于传统原因,这是和旧版本不再在任何在线回购托管,并为暂时我不能取代它,因此我必须在本地托管它)。Maven尝试使用错误的快照版本

现在,我想我误解了SNAPSHOT概念,所以如果有人能够让我直观,我会非常感激。我拥有的jar名为foo-0.5.0-20090612.124.jar,我尝试使用maven deploy将其上传到org.bar.foo,版本为0.5.0。 我的POM中的版本依赖是0.5.0-SNAPSHOT

每次我将jar文件上传到我们的本地repo时,文件名中的日期后面的数字被迭代(即125),但是当我运行maven install ,maven尝试下载一个具有前一个数字的罐子(即124)。

那么,有没有办法让maven下载正确的快照版本,或者我应该没有业务上传第三方SNAPSHOT文件到我们的回购?

回答

4

您使用的用例很好。我相信Maven人推荐的最佳做法是,一旦将一个JNA的SNAPSHOT版本上传到共享存储库,您应该停止将其视为SNAPSHOT,而是作为发布。

这是有道理的,因为你想让人们依靠该神器的特定版本。神器并没有处于积极的发展之中,预计在任何时候都不会随意改变,因此它应该被认为是释放。只有一个你给你自己的个人花哨的名字,还有一个别人认为是SNAPSHOT。

当你问到依赖关系foo-0.5.0-SNAPSHOT时,我不相信Maven会寻找foo-0.5.0-。我相信它确实在存储库中查找foo-0.5.0-SNAPSHOT,这就是为什么你没有找到它。 (虽然我们没有100%的把握,因为我们没有时间戳我们的SNAPSHOTS,我们只是不断地用新版本覆盖-SNAPSHOT罐子,因为它们是制作的。)

因此,把foo-0.5.0-20090612.124.jar到您的第三方存储库(由于上述原因,应只包含发行版)。然后在你的pom中,明确引用“已发布”的工件foo-0.5.0-20090612.124,并且一切都应该正常工作。

+0

我会说,本质上你是对的,我真的没有业务添加第三方快照到我的回购。最好的解决方案是最简单的,即去除SNAPSHOT标签。 – mikek 2009-06-15 08:41:05

0

我不确定我是否关注,您应该有一个名为myartifact.jar的工件附加到POM,版本号为0.5-SNAPSHOT

部署时,你的资料库应该改变-SNAPSHOT成时间戳和更新资源库的元数据来反映,这是最新的快照版本,以便它可以正确地服务于快照请求。

您是否使用存储库,如ArchivaNexus或只是一个FTP/HTTP服务器?

+0

既不只是本地文件服务器。这个回购纯粹是为了内部使用。 虽然这正是我想要做的。问题是,当我运行Maven安装时,它不是搜索正确的时间戳,而是更早的时间戳。 第三方jar里面有什么内在的东西来决定它的时间戳吗? – mikek 2009-06-12 10:59:29