【问题标题】:Synchronize my local maven repository to Nexus public repository将我的本地 maven 存储库同步到 Nexus 公共存储库
【发布时间】:2018-02-09 04:43:27
【问题描述】:

我有一个本地存储库,一段时间以来我一直在安装来自不同项目的 jars。我们还运行了一个 nexus 服务器,但它没有我在本地拥有的所有 jar。

我可以尝试将 jar 一个一个同步到 nexus。但是有没有更有效的方法来同步到 nexus 呢?理想情况下,我希望执行一个命令,该命令将查看本地 repo 中的所有工件,并推送 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!"
      )

    )
  )
)

【问题讨论】:

  • 基本问题是所有项目都必须交付到 Nexus 服务器...这解决了整个问题...

标签: java maven synchronization nexus artifacts


【解决方案1】:

Maven 目标deploy:deploy-file

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

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

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

【讨论】:

  • 这并不能真正回答问题?
  • @robjwilkins 我的回答可能比你的回答更有帮助。 OP说罐子已经存在。我提供了一条如何编写修复给定情况的脚本的路径。
【解决方案2】:

如果不编写自定义脚本,就无法轻松做到这一点。但是,如果您有一个构建所有内容并通过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 存储库与远程存储库进行比较,并根据需要复制不同的项目。一旦复制了必要的更改,远程存储库的重新索引应该会获取您所做的更改。然而,Nexus 3 将人工制品存储在数据库中,因此如果您使用的是该版本,这是不可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2014-10-20
    • 2011-09-16
    • 1970-01-01
    • 2014-01-23
    • 2019-08-03
    • 2014-08-31
    相关资源
    最近更新 更多