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

标签 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>

但它似乎不起作用,因为以下内容需要相同的时间:

  1. 当构建我的项目时,~/local_repo_tmp~/.m2/repository 为空
  2. ~/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/

相关文章:

java - 在 Onclick 方法中捕获数据库 ID

java - maven中如何继承其他库的依赖?

java - 我们可以在Java中借助匿名类来创建接口(interface)和抽象类的实例化吗?

java - 运行 Spring Boot 时出错(通过字段表达的依赖关系不满足)

java - 为什么 JHipster 对于 maven 和 gulp 有 2 个不同的服务器 URL?我应该使用哪一个?

java - 在本地主机上打开 JNLP 错误

java - 根据 Spring 配置文件注册不同的流

java - 来自 Jenkins 的 Sonarqube 扫描 : ClassNotFoundException: org. eclipse.jgit.api.Git

java - 如何知道 .jar Nexus Artifact 是从哪个分支发出的

java - Maven 插件问题 :maven-enforcer-plugin:3. 0.0-M3:enforce 某些 Enforcer 规则失败