将我的本地maven存储库同步到Nexus公共存储库

时间:2017-08-31 09:21:57

标签: java maven synchronization nexus artifacts

我有一个本地存储库,我从不同的项目中安装了一段时间。我们还运行了一个nexus服务器,但它没有我本地的所有jar。

我可以尝试逐个将罐子同步到nexus。但是有更有效的方法来同步到nexus吗?理想情况下,我想执行一个命令来查看我本地仓库中的所有工件,并推送nexus中缺少的任何东西。

如果cmd脚本是唯一的方法,那么对于这方面的具体提示也会非常有用。

到目前为止,我可能会更新我的进展

echo off
echo MavenSync
setlocal EnableDelayedExpansion
for /R . %%f in (*) do (
  set jarfile=%%~dpnxf
  set name=%%~dpnf
  set pomFile=!name!.pom
  set clientJar=!name!-client.jar

  if [!jarfile:~-4!]==[.jar] (
    echo !jarfile!
    echo !pomFile!
    set repo=http://server/nexus/content/repositories/releases/

    if [!jarfile:~-10!]==[client.jar] (

      rem Handled elsewhere

    ) else (

      if [!jarfile:~-12!]==[SNAPSHOT.jar] (
        set repo=http://server/nexus/content/repositories/snapshots/
      )

      if EXIST !clientJar! (
        echo mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=nexus -Durl=!repo! -DpomFile="!pomFile!" -Dfile="!jarfile!" -Dfiles="!clientJar!" -Dtypes=client-jar -Dclassifiers=bin
      ) else (
        echo mvn deploy:deploy-file -Dpackaging=jar -DrepositoryId=nexus -Durl=!repo! -DpomFile="!pomFile!" -Dfile="!jarfile!"
      )

    )
  )
)

2 个答案:

答案 0 :(得分:0)

Maven目标deploy:deploy-file

http://maven.apache.org/plugins/maven-deploy-plugin/deploy-file-mojo.html

可以将单个工件部署到Nexus(附带pom,因此您不需要手动指定GAV)。

您需要编写一个在本地存储库上运行的脚本,收集所有工件并使用上述目标将它们部署到Nexus。

答案 1 :(得分:-1)

如果不编写自定义脚本,就无法轻松完成此操作。但是,如果您的构建构建了所有内容并通过mvn install在本地安装,那么您可以通过mvn deploy将其部署到您的nexus。要实现此目的,您需要在{pom}中为distributionManagement添加一个部分:

<distributionManagement>
    <snapshotRepository>
        <id>snapshot.nexus</id>
        <url>${nexus.snapshot.repo}</url>
    </snapshotRepository>
    <repository>
        <id>release.nexus</id>
        <url>${nexus.release.repo}</url>
    </repository>
</distributionManagement>

这只会部署每个项目的最新版本,而不是旧版本的历史记录。

根据您使用的nexus版本,可以复制文件系统的内容。 Nexus 2使用基于文件系统的存储,因此您可以将.m2 repo与远程存储进行比较,并根据需要复制不同的项目。一旦复制了必要的更改,远程仓库的重新索引应该获取您所做的更改。 Nexus 3会将人工制品存储在数据库中,因此如果您使用的是该版本,则无法实现。