如何强制Maven从中央存储库下载maven-metadata.xml?

时间:2009-08-13 16:57:59

标签: java maven-2 maven-metadata

我想要做的是强制Maven为我本地存储库中的每个工件下载'maven-metadata.xml'。

默认的Maven行为是仅从远程存储库下载元数据(请参阅this question)。

为什么我要这样做:

目前,我在构建计算机中运行了一个远程存储库。通过远程存储库,我指的是位于构建计算机中的目录,其中包含构建我的Maven项目所需的所有依赖项。请注意,我没有使用像Nexus这样的存储库管理器,存储库只是我上传到构建机器的本地存储库的副本。

但是,由于我的本地存储库不包含“maven-metadata.xml”文件,因此构建计算机存储库中也缺少这些元数据文件。如果我可以从中央存储库中检索元数据文件,那么就可以将一个有效的远程存储库上传到我的构建机器。

4 个答案:

答案 0 :(得分:8)

您不希望从公共存储库获取元数据,它将包含给定工件的所有可用版本,而您的存储库将包含某些版本的子集。

值得指出的是,使用存储库管理器确实会更好。以下步骤允许您生成一次工件元数据。但是,如果您的需求发生变化,您将不得不重复此过程或手动更新文件,那么为什么不使用经理呢? Nexus可以独立运行,占用空间非常小。


即使您不打算将Nexus用于存储库管理器,您仍然可以使用它来生成元数据。

  1. 首先install Nexus。
  2. 找到nexus工作目录(默认为$ {user.home} / sonatype-work。
  3. 将本地存储库内容复制到nexus-work / releases子目录。
  4. Start Nexus并在浏览器中连接到Nexus主页(默认为http://localhost:8081/nexus
  5. 使用管理员帐户(密码admin123)
  6. 登录
  7. 点击左侧的存储库链接。
  8. 选择版本库,右键单击并单击重建元数据
  9. 稍后您应该为所有工件生成元数据。然后,您可以将它们复制到您需要的位置并卸载Nexus。

答案 1 :(得分:4)

默认存储库在super pom.xml中定义,默认情况下所有poms都继承。

如果在本地你的意思是你只想使用〜/ .m2 / repos / *然后在离线模式下工作。将<offline>true</offline>添加到您的settings.xml

如果在本地你的意思是你的本地服务器,你可以安装像Nexus这样的存储库管理器,修改你的设置文件,在这样的“镜像”下使用nexus:

<mirror>
  <id>central-proxy</id>
  <mirrorOf>central</mirrorOf>
  <url>my/local/nexus/server</url>
</mirror>

并禁用Nexus中不需要的远程存储库。

答案 2 :(得分:1)

我发现有一件事是有人正在初步搜索jarvana并将其放在pom中,导致出现元数据错误消息。这......

   <!-- <repository>
        <id>jarvana</id>
        <url>http://www.jarvana.com/jarvana/browse/</url>
    </repository> -->

..修好了,错误就消失了。

答案 3 :(得分:0)

存储库管理器很棒,但我不想安装并在我的笔记本电脑上运行它。我只是想节省资源。 所以,我的解决方案如下:

  1. 将存储库安装为artifactory(https://www.jfrog.com/artifactory
  2. 通过此服务器运行实体化(localhost:8081)
  3. 通过远程服务器(center.maven.org)实现物化:
  4. 下载神器的缓存内容
  5. 合并到文件夹:从步骤4下载文件夹,在〜/ .m2 / repository。下载文件夹。
  6. 现在我的存储库已脱机,包含完整内容(二进制文件,源代码,xml,md5,sha1)