2017-10-17 98 views
1

如何在構建一個包時將Maven配置爲使用多個本地存儲庫?構建Maven時使用多個本地存儲庫

我有兩個文件夾,~/.m2/repository(默認的Maven)和~/local_repo_tmp並希望實現以下幾點:

如果Maven可以找不到~/local_repo_tmp它裏面的東西從遠程倉庫下載並投入~/.m2/repository,否則必須將~/local_repo_tmp的副本放到~/.m2/repository

我試圖添加以下到我的pom.xml

<repositories> 
     <repository> 
      <id>firstrepo</id> 
      <name>repo</name> 
      <url>file:///Users/myusername/local_repo_tmp</url> 
     </repository> 
</repositories> 

但它似乎不起作用,因爲它需要同時爲以下:

  1. 當建立我的項目當兩個~/local_repo_tmp~/.m2/repository是空
  2. ~/local_repo_tmp是副本~/.m2/repository以前 狀態,但~/.m2/repository爲空

我該怎麼做?

回答

0

基本上,你有正確的做法。您設置了第二個「遠程存儲庫」,並允許它們填充通常在目錄中找到的「本地存儲庫」

也就是說,本地和遠程存儲庫之間存在一些細微的差異。只需將您的~/.m2/repository/目錄複製到本地安裝的「遠程」存儲庫中,可能無法獲得您想要的結果。

您可能需要登錄到遠程回購站,或者至少通過Web界面瀏覽它以查看它與本地回購站之間的差異。基本上,本地回購存在微妙的變化,這有助於確定本地緩存是否比遠程回收更有意義。對於「本地遠程」,您需要模擬遠程回購的文件設置,而不是本地的副本/克隆。

您列出遠程存儲庫的順序將控制您從哪個存儲庫接收工件。如果它在第一個存儲庫中找到,那麼只要您使用的是現代Maven,就會從第一個存儲庫中獲取該包。否則,您將從第二個回購中獲得包裝。

有時候人們想要一個遠程倉庫的本地倉庫緩存。在這種情況下,我建議設置一個本地Artifactory實例,並將其配置爲上游回購緩存鏡像。

自從我做你想問的事情已經很長時間了,但我可以證實我已經做到了。我不記得其中的一個細節,但我記得從文件URL和ssh URL接近它。我記得其中一個爲我的目的工作更好,但我不確定哪一個和爲什麼。

祝你好運!

+0

但是,如果我已經有遠程存儲庫呢? 我可以對Maven說要先檢查存儲庫中的文件URL,然後檢查其他嗎? 是否有任何方法可以在'pom.xml'內指定遠程倉庫而不是'settings'。xml'爲本地存儲庫? – sp41mer

+0

對不起,我的評論很快,但錯過了一些答案。我會更新它。 –

+0

謝謝:) 此外,我認爲找到了我的評論關於秩序的答案這裏https://stackoverflow.com/questions/5325407/how-to-set-order-of-repositories-in-maven-settings- XML – sp41mer