Deployment 使用本地工件更新Nexus存储库

Deployment 使用本地工件更新Nexus存储库,deployment,maven,nexus,Deployment,Maven,Nexus,我最近将一些maven工件直接下载到本地存储库(.m2/repository)。 现在我安装了Nexus Repository Manager,需要填充其存储空间,而无需再次下载所有工件。是否有办法用本地存储库更新Nexus存储库。 我不想简单地复制它们,因为Nexus将与它们的公共服务器(central、codehaus等)相关的工件分开,而本地存储库结构则没有 更新: 同时,我将工件从本地存储库复制到Nexus存储库(公共存储库)。我可以通过NexusWebApp浏览到工件,但Maven无法

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

更新: 同时,我将工件从本地存储库复制到Nexus存储库(公共存储库)。我可以通过NexusWebApp浏览到工件,但Maven无法从Nexus解析工件。
我需要特别注册吗?我对公共存储库重新编制了索引,并多次重新启动了Nexus—没有任何更改。

Nexus有几种类型的存储库:托管存储库(真正存储maven工件的存储库)、代理存储库(在请求工件时将流量重定向到其他远程存储库)、虚拟存储库(仅仅是maven1存储库的适配器[不在本问题的范围内])。您还可以创建存储库组,这些存储库组可以为来自其任何聚合的工件提供服务(公共存储库就是其中之一)

此外,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>

org.sonatype.nexus.tools
nexus存储库转换工具
1.8.0.1
cli
下载完毕后,您只需执行
java-jar nexus-repository-conversion-tool-1.8.0.1-cli.jar-rSource-oTarget
,其中
Source
是包含要移动到nexus的本地存储库的目录,
Target
是一个现有的、空的、可写的目录,转换工具将在该目录中离开拆分的repo假设源目录是
repository
,目标目录是
temp
,它将创建
temp/repository快照
temp/repository releases
目录

第二步:将拆分的回购协议移动到nexus。并将其留在
${nexus_HOME}/sonatype work/nexus/storage
中,或者将nexus安装配置为存储存储库的任何位置

第三步:创建两个托管存储库,其id与您在第二步中移动的回购相同。(在示例
存储库快照
存储库发布


如果您的repo只包含发行版,那么您的解决方案可能会起作用,但您将犯下另一个错误。尽管nexus为每个存储库存储工件,但存储非托管repo的工件仅用于缓存目的(如
公共
存储库)你必须把你的内容复制到一个托管的目录中。

你还必须考虑你的存储库中存放了什么样的工件。Nexus将存储库划分成SpSpX,并根据它托管快照伪像或发布快照而释放。虽然它是Sooh,但是我读到你的答案太晚了。我想h会为我节省很多时间。我还分离了快照和发布工件,然后手动将它们移动到相应的Nexus存储库中。我不得不使用cli部署每个发布工件。对于快照,它足以重新索引Nexus缓存。谢谢!