如何配置 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
和~/.m2/repository
为空 - 当
~/local_repo_tmp
是~/.m2/repository
之前的副本时 状态,但~/.m2/repository
为空
我做错了什么?
最佳答案
基本上,您的方法是正确的。您设置了第二个“远程存储库”,并允许它们填充通常在 ~/.m2/
目录中找到的“本地存储库”
也就是说,本地存储库和远程存储库之间存在一些细微的差异。简单地将您的 ~/.m2/repository/
目录复制到本地安装的“远程”存储库中可能无法获得您想要的结果。
您可能需要登录远程存储库,或者至少通过 Web 界面浏览它,以查看它与本地存储库之间的差异。基本上,本地存储库中有一些细微的变化,可以更有意义地帮助确定本地缓存是否比远程缓存旧。对于“本地远程”,您需要模拟远程存储库的文件设置,而不是本地存储库的副本/克隆。
列出远程存储库的顺序将控制您从哪个存储库接收 Artifact 。如果在第一个存储库中找到它,只要您使用现代 Maven,您就会从第一个存储库中获取该包。否则,您将从第二个存储库获取包。
有时人们想要他们使用的远程存储库的本地存储库缓存。在这种情况下,我建议设置一个本地 Artifactory 实例,并将其配置为上游存储库的缓存镜像。
自从我执行您所要求的操作以来已经很长时间了,但我可以确认我已经成功了。我不记得其中一个细节,但我记得从文件 URL 和 ssh URL 访问它。我记得这两种方法中的一种更适合我的目的,但我不确定哪一种以及为什么。
祝你好运!
关于java - 构建 Maven 时使用多个本地存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798401/