在构建Maven时使用多个本地存储库

时间:2017-10-17 20:10:11

标签: java maven

如何在构建一个软件包时将Maven配置为使用多个本地存储库?

我有两个文件夹,~/.m2/repository(默认为Maven)和~/local_repo_tmp,并希望实现以下内容:

如果Maven无法在~/local_repo_tmp内找到某些内容,则必须从远程存储库下载并放入~/.m2/repository,否则必须将副本从~/local_repo_tmp添加到~/.m2/repository pom.xml

我已尝试将以下内容添加到<repositories> <repository> <id>firstrepo</id> <name>repo</name> <url>file:///Users/myusername/local_repo_tmp</url> </repository> </repositories>

~/local_repo_tmp

但似乎它不起作用,因为它需要相同的时间来跟随:

  1. ~/.m2/repository~/local_repo_tmp同时构建项目时 ~/.m2/repository为空
  2. ~/.m2/repository groceries.SelectMany(g => g.ItemTypes).Where(t => t.Weight == 1).ToList().ForEach(t => quantities.Add(t.Quantity)); 之前的副本时 州,但GROUP BY为空
  3. 我做错了什么?

1 个答案:

答案 0 :(得分:0)

基本上,你有正确的方法。您设置了第二个“远程存储库”并允许它们填充通常在~/.m2/目录中找到的“本地存储库”

也就是说,本地和远程存储库之间存在一些细微差别。只需将~/.m2/repository/目录复制到本地安装的“远程”存储库中,就可能无法获得所需的结果。

您可能需要登录远程仓库,或者至少通过Web界面浏览它以查看它与本地仓库之间的差异。基本上,本地仓库中有微妙的变化,这有助于确定本地缓存是否比远程更旧。对于“本地远程”,您需要模拟远程仓库的文件设置,而不是本地的副本/克隆。

列出远程存储库的顺序将控制从哪个存储库接收工件。如果在第一个存储库中找到它,只要您使用现代Maven,就可以从第一个存储库中获取包。否则,你将从第二个回购中获得包裹。

有时候人们想要一个他们使用的远程仓库的本地仓库缓存。在这种情况下,我建议设置一个本地Artifactory实例,并将其配置为上游存储库的缓存镜像。

我做了你所要求的事情已经有很长一段时间了,但我可以确认我已经开始工作了。我不记得其中一个细节,但我记得从文件URL和ssh URL接近它。我记得两个中的一个对我的目的更好,但我不确定哪一个和为什么。

祝你好运!