7

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

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

为什么我想这样做:

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

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

4

4 回答 4

9

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

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


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

  1. 首先安装Nexus。
  2. 找到 nexus 工作目录(默认为 ${user.home}/sonatype-work.
  3. 将本地存储库内容复制到 nexus-work/releases 子目录。
  4. 启动 Nexus并在浏览器中连接到 Nexus 主页(默认为http://localhost:8081/nexus
  5. 使用管理员帐户(密码 admin123)登录
  6. 单击左侧的存储库链接。
  7. 选择 Releases 存储库,右键单击并单击Rebuild Metadata

片刻之后,您应该为所有工件生成元数据。然后,您可以将它们复制到需要它们的任何位置并卸载 Nexus。

于 2009-08-13T20:14:24.373 回答
4

默认存储库在所有 pom 默认继承的super pom.xml中定义。

如果本地表示您只想使用 ~/.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 中不需要的远程存储库。

于 2009-08-13T17:07:19.640 回答
1

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

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

..修复它并且错误消失了。

于 2011-02-04T23:21:22.777 回答
0

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

  1. 将存储库安装为工件(https://www.jfrog.com/artifactory
  2. 通过此服务器运行物化(本地主机:8081)
  3. 通过远程服务器(center.maven.org)运行物化
  4. 下载神器的缓存内容
  5. 合并到文件夹:从第 4 步下载的文件夹和位于 ~/.m2/repository 的文件夹。

现在我有一个包含完整内容(二进制、源代码、xml、md5、sha1)的离线存储库

于 2016-01-10T14:24:17.990 回答