2010-11-22 48 views
9

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

更新: 同时,我将工件从本地存储库复制到Nexus存储(公共存储库)。我可以通过Nexus Web应用程序浏览文物,但Maven无法解决来自Nexus的文物。 我需要特别注册吗?我重新编制了公共存储库的索引并多次重新启动Nexus - 无需更改。

回答

13

的Nexus具有若干类型存储库:托管库(那些确实存储行家伪影),代理库(当请求一个工件,流量重定向到其它远程仓库),虚拟库(仅仅maven1仓库的适配器[超出了这个问题的范围])。您还可以创建存储库组,这些存储组可以提供来自其任何集合的工件(public存储库就是其中之一)。

此外,承上启下根据其出版政策为快照发布划分他们的仓库。前者仅存储快照文物;而后者在理论上可以存储快照和发布,但是当回购非常大并且包含快照时,它实际上表现出错误。

为了举办的文物,你需要:

第一:将你的本地仓库分为两个:一个包含快照,另一个包含版本。的Nexus仓库皈依工具将帮助你,如果你的回购是非常大的:

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

一旦downlaoded你可以执行java -jar nexus-repository-conversion-tool-1.8.0.1-cli.jar -rSource -oTarget其中Source是包含本地存储库移动到承上启下的目录,并Target是一个现有的空以及转换工具将离开拆分存储库的可写目录。假设源目录是repository并且目标是temp,它将创建temp/repository-snapshotstemp/repository-releases目录。

第二个:将您拆分的回购移动到联系。并将它们留在${NEXUS_HOME}/sonatype-work/nexus/storage中,或将您的连接安装配置为存储存储库的位置。

三:创建两个托管库用相同的ID,你在第二步中移动的回购协议。 (在示例repository-snapshotsrepository-releases

如果您的回购将只包含版本,您的解决方案可能已经工作,但您会犯另一个错误。尽管nexus为每个存储库存储工件,但那些未托管repos的存储仅用于缓存目的(如public存储库的情况),您必须将您的内容复制到托管的内容才能工作。

+0

您还必须考虑您在存储库中托管的是哪种工件。 Nexus将存储库划分为spanshots和release,具体取决于它承载快照构件还是发布+快照。虽然它很帅 – Miguel 2011-01-03 17:00:24

+0

哦,我太迟读了你的回答。我想你的方法会为我节省很多时间。我还分离了快照和释放工件,然后手动将它们移动到相应的Nexus存储库。我以某种方式必须使用cli部署每个发布工件。对于快照,它可以重新索引Nexus缓存。谢谢! – mamuesstack 2011-03-15 07:40:00