2017-08-31 220 views
2

我有一個本地存儲庫,我一直從不同的項目中安裝jars一段時間。我們也有一個nexus服務器運行,但它並沒有我在本地的所有罐子。將我的本地Maven存儲庫同步到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!" 
    ) 

    ) 
) 
) 
+1

基本問題是,所有項目都應該交付到Nexus服務器...解決了整個問題... – khmarbaise

回答

-1

沒有輕易這樣做,而無需編寫自定義腳本的方式。但是,如果您有構建所有內容並通過mvn install在本地安裝的構建,則可以通過執行mvn deploy將其部署到您的連接。對於這個工作,你需要一個部分添加到您的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將文物存儲在數據庫中,因此如果您使用該版本,則不可能。

-1

Maven的目標deploy:deploy-file

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

可以部署單一的文物的Nexus(附聚甲醛,所以您不必手動指定GAV)。

您需要編寫一個運行在本地存儲庫上的腳本,收集所有工件並使用上述目標將它們部署到Nexus。

+0

這並不真正回答這個問題嗎? – robjwilkins

+0

@robjwilkins我的答案可能比你的更有幫助。 OP說罐子已經存在。我提供了一條如何編寫修復給定情況的腳本的路徑。 –