我有一个本地存储库,我从不同的项目中安装了一段时间。我们还运行了一个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!"
)
)
)
)
答案 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会将人工制品存储在数据库中,因此如果您使用的是该版本,则无法实现。