2017-10-17 53 views
1

如何在构建一个包时将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> 

但它似乎不起作用,因为它需要同时为以下:

  1. 当建立我的项目当两个~/local_repo_tmp~/.m2/repository是空
  2. ~/local_repo_tmp是副本~/.m2/repository以前 状态,但~/.m2/repository为空

我该怎么做?

回答

0

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

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

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

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

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

自从我做你想问的事情已经很长时间了,但我可以证实我已经做到了。我不记得其中的一个细节,但我记得从文件URL和ssh URL接近它。我记得其中一个为我的目的工作更好,但我不确定哪一个和为什么。

祝你好运!

+0

但是,如果我已经有远程存储库呢? 我可以对Maven说要先检查存储库中的文件URL,然后检查其他吗? 是否有任何方法可以在'pom.xml'内指定远程仓库而不是'settings'。xml'为本地存储库? – sp41mer

+0

对不起,我的评论很快,但错过了一些答案。我会更新它。 –

+0

谢谢:) 此外,我认为找到了我的评论关于秩序的答案这里https://stackoverflow.com/questions/5325407/how-to-set-order-of-repositories-in-maven-settings- XML – sp41mer