2012-10-11 125 views
8

我有一個使用內部存儲庫和中央存儲庫的項目。有沒有一種方法可以配置settings.xml,以便我可以同時使用它們而不是一個?當我添加在Maven中使用多個存儲庫

<mirrors> 
    <mirror> 
     <id>MY ID</id> 
     <url>MY URL</url> 
     <mirrorOf>*</mirrorOf> 
    </mirror> 
</mirrors> 

在settings.xml中,我可以查看我自己的內部存儲庫,但它覆蓋了中央存儲庫。

我相信這是新手Maven遇到的一個常見問題。

回答

8

有幾種方法可以做到這一點。

最好的IMO是讓本地存儲庫服務器充當Maven Central的代理。 Nexus和Artifactory都是開箱即用的。如果您使用的是Apache或其他Web服務器,則應該切換。

您還可以更新您的設置從你的鏡子排除在目標服務器:

<mirrorOf>*,!MyOtherRepository</mirrorOf> 

這工作,如果你有多個本地資源庫服務器,但我不認爲你可以排除中央是這樣的:默認情況下,Maven在中央查找工件,並且您的服務器充當它的替身。

其中在您的POMS中引用了本地存儲庫的顯式存儲庫條目。如果您的本地存儲庫只是爲您的工件提供服務,這可能是第二個最簡單的事情(特別是如果您使用包含存儲庫規範的父POM)。

+0

不,我實際上有一個遠程存儲庫,爲其他人的工件提供服務。我需要設置s.t. maven檢查中央和遠程存儲庫的結果。 –

+0

同樣,最簡單的方法是作爲代理的本地存儲庫服務器。我認爲你在(父)POM中顯式地加入了''條目。 – parsifal

4

你的鏡像指令正在鏡像的一切。你可以由此排除命名庫:

<mirrorOf>!myExcludedRepo,*</mirrorOf> 

上述鏡一切,除了一個名爲myExcludedRepo庫。

這裏是Maven guide for mirroring。特別注意標記爲高級的部分。那裏有很多功能。

0

我找到工作的答案,這是改變的pom.xml來代替,而在飛行中添加遠程倉庫,作爲答案,鄉親指示,this link

謝謝,我會假設你的建議,可以對於具有更多存儲庫和複雜配置的更復雜場景非常有用。

+0

好吧,很高興你能找到它,雖然「在你的POM中留下了顯式的存儲庫條目」似乎對我來說很清楚。 – parsifal

+0

好。我會接受你的答案然後:)(雖然那裏的鏈接提供了低級解決方案)。 –

0

我使用三個回購(使用Nexus),第一個是我添加所有外部存儲庫的代理存儲庫。另外兩個是我的內部版本庫,用於部署發行版和快照。這裏是我的.m2/settings.xml中:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> 
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html --> 

    <interactiveMode>true</interactiveMode> 
    <offline>false</offline> 

    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>external:*</mirrorOf> 
     <url>http://localhost:3129/nexus/content/groups/public</url> 
    </mirror> 
    </mirrors> 

    <profiles> 
    <profile> 
     <id>nexus</id> 
     <repositories> 
      <repository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository> 

      <repository> 
       <id>internal.releases</id> 
       <url>http://localhost:3129/nexus/content/repositories/releases</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository>   

      <repository> 
       <id>internal.snapshots</id> 
       <url>http://localhost:3129/nexus/content/repositories/snapshots</url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository>   
     </repositories> 

     <pluginRepositories> 
      <pluginRepository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </pluginRepository> 
     </pluginRepositories> 
     <properties> 
      <downloadSources>true</downloadSources> 
      <downloadJavadocs>true</downloadJavadocs>   
     </properties> 
    </profile> 
    </profiles> 

    <activeProfiles> 
    <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

    <servers> 
    <server> 
     <id>internal.releases</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    <server> 
     <id>internal.snapshots</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    </servers> 

</settings> 

Maven使用它們,所以你可能需要使用的Nexus的路由功能,以阻止「^ /我的/私營/包/.*」它確實是這樣不要嘗試從外部存儲庫獲取內部軟件包。我沒有將內部回購添加到代理回購。

你不需要調整你的pom.xml文件來運行。只需輸入「mvn deploy」。