10

我最近将一些 Maven 工件直接下载到我的本地存储库(.m2/repository)。现在我安装了 Nexus Repository Manager 并且需要填充它的存储而不需要再次下载所有的工件。有没有办法用本地更新 Nexus 存储库。我不想简单地复制它们,因为 Nexus 将与其公共服务器(中央、codehaus 等)相关的工件分开,而本地存储库结构则没有。

更新:同时我将工件从本地存储库复制到 Nexus 存储(公共存储库)。我可以通过 Nexus webapp 浏览到工件,但 Maven 不知何故无法解析来自 Nexus 的工件。我需要特别注册吗?我重新索引了公共存储库并多次重新启动 Nexus - 没有任何变化。

4

1 回答 1

13

Nexus 有几种类型的存储库:托管存储库(那些真正存储 maven 工件的存储库)、代理存储库(在请求工件时将流量重定向到其他远程存储库)、虚拟存储库(仅 maven1 存储库的适配器 [超出这个问题])。您还可以创建可以从其任何聚合中提供工件的存储库组public(存储库就是其中之一)。

此外,nexus 根据其发布策略将其存储库划分为快照发布。前者仅存储快照工件;虽然后者在理论上可以同时存储快照和版本,但是当 repo 非常大并且包含快照时,它实际上会出现错误。

为了托管您的工件,您需要:

首先:将本地存储库分为两部分:一个包含快照,另一个包含发布。如果您的存储库非常大,Nexus 存储库转换工具将为您提供帮助:

    <dependency>
        <groupId>org.sonatype.nexus.tools</groupId>
        <artifactId>nexus-repository-conversion-tool</artifactId> 
        <version>1.8.0.1</version>
        <classifier>cli</classifier> 
    </dependency>

下载后,您只需执行java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTargetwhereSource包含要移动到 nexus 的本地存储库的目录,并且Target是一个现有的、空的和可写的目录,转换工具将离开拆分的存储库。如果 source 目录是repository并且 Target 是temp,它将创建temp/repository-snapshotstemp/repository-releases目录。

第二:将您拆分的存储库移至 nexus。并将它们留在 中${NEXUS_HOME}/sonatype-work/nexus/storage,或者您的 nexus 安装配置为存储存储库的任何位置。

第三:创建两个托管存储库,其 id 与您在第二步中移动的存储库相同。(在示例中repository-snapshotsrepository-releases

如果你的 repo 只包含发布,你的解决方案可能有效,但你会犯另一个错误。虽然 nexus 为每个存储库存储工件,但那些非托管存储库的存储仅用于缓存目的(如public存储库的情况),您必须将内容复制到托管的一个才能工作。

于 2011-01-03T14:15:00.363 回答