我希望我的Nexus repo能够在24小时内镜像另一个Nexus repo的快照

时间:2014-11-25 16:39:29

标签: maven nexus

我正在处理与客户端相同的代码,但我无法共享其SVN服务器。这就是为什么我在我们的SVN服务器之间用git-svn建立桥接以保持代码同步。出于某种原因,我可以每天只进行一次自动同步,比如说早上3点。这部分(几乎)正常工作。

我还有一个Nexus存储库,它是我客户的Nexus存储库的镜像。代码依赖于我客户端的许多其他工件,所有工件都在SNAPSHOT版本中。通常,其中一个依赖项的API会发生变化,并且我的客户端的Nexus存储库中会出现一个新的工件。当我在本地编译时,maven检查新版本的依赖项,使用新API查找新工件,下载它,并将其用于编译。由于我的代码每天只进行一次同步,因此我没有最新的代码版本,并且我的本地代码不再编译。代码和Nexus之间存在时间上的不一致。

要解决这个问题,我希望我的本地Nexus repo不要检查其父版本的新版本。这是我的问题,我不知道该怎么做。

到目前为止我的解决方案是:

  • 在3点钟到期我的本地Nexus仓库的缓存(使用Nexus 预定任务)
  • 将缓存工件最大年龄设置为1440分钟(24小时) 因此,repo会认为缓存在下一次​​之前是正常的 SVN同步
  • 也将元数据的最大年龄设置为1440分钟,以便我的回购 不会考虑在父仓库上重新检查元数据

这是我的知识引导我的地方,但似乎这是不正确的,因为当我使用-U选项进行编译时,我的本地仓库仍然不断重新检查其父版本的新版本。

有人可以告诉我哪里错了吗?是否与索引有关?

2 个答案:

答案 0 :(得分:1)

下载的快照由maven-metadata.xml文件决定,因此如果您需要在发布最新快照后立即将快照代理存储库的元数据最大年龄设置为零。

如果您使用的是Nexus Professional,则可以使用其智能代理功能避免零缓存超时的开销:

http://books.sonatype.com/nexus-book/reference/_introduction_3.html

答案 1 :(得分:0)

我的解决方案很好:通过这项政策,我可以快速了解客户的回购24小时。为了确保 my repo上的所有文物在时间上保持一致,我已经添加了一份日常工作,可以下载所有我工作日所需的依赖项, 一次全部。此作业只是在 expire cache 之后执行maven的依赖插件的 go-offline 目标。

为什么我在这里发布了我的repo的错误行为,但这些错误的根源不是Nexus缓存机制,而是路由机制。事实上,我的回购是客户回购的代理回购,其类型为 group 。我在Nexus文档中发现路由机制无法用于类型的回购。 我停用了路由,现在一切正常。