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

7
我想要做的是强制Maven下载本地仓库中每个构件的“maven-metadata.xml”。 Maven的默认行为是仅从远程仓库下载元数据(请参见this question)。 我为什么要这样做: 目前我在构建机上运行一个远程仓库。 远程仓库是指位于构建机上的包含构建Maven项目所需的所有依赖项的目录。 请注意,我没有使用Nexus等仓库管理器,该仓库只是我上传到构建机的本地仓库的副本。 但是,由于我的本地仓库不包含“maven-metadata.xml”文件,因此这些元数据文件也在构建机仓库中丢失。 如果可以从中央仓库检索元数据文件,则可以上传可用的远程仓库到我的构建机。

我不太清楚你的意思,也不知道你为什么需要这样做。你能解释一下你想要实现什么吗? - Rich Seller
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
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. 单击左侧的repositories链接。
  7. 选择Releases存储库,右键单击并单击Rebuild Metadata
几秒钟后,您应该已经生成了所有构件的元数据。然后,您可以将它们复制到需要它们的任何位置,并卸载Nexus。

1
我同意,他需要为构建和本地机器使用共享存储库。他不可能让两个元数据副本保持同步。 - sal
1
这个解决方案对我有效。同时,感谢Sal的建议,不过我真正需要的是针对这个问题的解决方法,尽管我明白那并不是理想的解决方案... - Alceu Costa
1
这并没有回答问题。 - Christian Neverdal
问题并不是关于为什么应该或不应该下载元数据,而是关于如何去做。 - user5365075

4
默认的存储库在所有POM默认继承的超级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 中不需要的远程存储库。


我所说的“本地”是指~/.m2/repos/*,但如果使用<offline>标签或-o标志,Maven将不会下载我想要的“maven-metadata.xml”文件。 - Alceu Costa
我认为你需要为远程机器设置不同的构建和部署仓库。让构建机器使用本地maven仓库进行构建,然后在磁盘上另外一个位置进行部署。使用一些服务器使第二个仓库可见。你还需要将本地构建部署到第三个仓库中。在这种情况下,元数据将自行解决。 - sal
什么是<mirrorOf>?为什么要使用它?上面的描述对我很有帮助。 - hari

1

我发现的一件事是有人在对jarvana进行初始搜索时,在pom中放置了这个内容,导致出现元数据错误消息。这可能会影响项目的构建和部署。为了解决这个问题,我们需要检查pom文件并删除不必要的内容。

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

我修复了它,错误消失了。


0

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

  1. 安装Artifactory作为存储库(https://www.jfrog.com/artifactory)
  2. 通过该服务器(localhost:8081)运行materialize
  3. 通过远程服务器(center.maven.org)运行materialize
  4. 下载Artifactory的缓存内容
  5. 合并到文件夹:从步骤4下载的文件夹和~/.m2/repository中的文件夹。

现在我有一个离线仓库,拥有完整的内容(二进制、源代码、xml、md5、sha1)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,