2016-07-05 19 views
0

我遇到了拉入新版本庫的問題,這個庫位於不同的存儲庫中。我相信我必須更新我的settings.xml和我的父級pom.xml,它指定了新版本。使用多個Maven鏡像將不同的jar版本拉入項目

目前我settings.xml讀取類似如下:

<settings> 
    <mirrors> 
     <mirror> 
     <id>nexus</id> 
     <url>http://serenity.gm.edu/nexus/content/groups/public/</url> 
     <mirrorOf>central</mirrorOf> 
     </mirror> 
     <mirror> 
     <id>mods</id> 
     <url>http://7.169.72.8:8081/nexus/content/repositories/releases/</url> 
     <mirrorOf>central</mirrorOf> 
     </mirror> 
    </mirrors> 
    <profiles> 
    <profile> 
     <id>default</id> 
     <repositories> 
      <repository> 
       <id>mod-thirdparty</id> 
       <url>http://7.169.72.8:8081/nexus/content/repositories/thridparty/</url> 
      </repository> 
      <repository> 
       <id>mod-snapshots</id> 
       <url>http://7.169.72.8:8081/nexus/content/repositories/snapshots/</url> 
      </repository> 
     </repositories> 
    </profile> 
</profiles> 

<servers> 
    <server> 
     <id>Tomcat</id> 
     <username>admin</username> 
     <password>xxx</password> 
    </server> 
</servers> 

默認鏡子在那裏一切都被從拉是寧靜。我試圖從7.169.72.8拉入一個自定義庫mod3.2,但版本2.3不斷從寧靜中拉進來。我嘗試了一些<mirrorOf>設置,例如*,!central,但沒有成功。

我的父母pom.xml非常簡單,定義了一系列模塊,過程和全局依賴關係。以下是感興趣的項目(顯示時間太長)。

<project ...> 
... 
<distributionManagement> 
    <repository> 
     <id>releases</id> 
     <name>mod2-releases</name> 
     <url>http://7.169.72.8:8081/nexus/content/repositories/releases</url> 
    </repository> 
    <snapshotRepository> 
     <id>snapshots</id> 
     <name>mod2-snapshots</name> 
     <url>http://7.169.72.8:8081/nexus/content/repositories/snapshots</url> 
    </snapshotRepository> 
</distributionManagement> 

<properties> 
    ... 
    <mod2.version>3.2</mod2.version> 
    ... 
</properties> 

    ... 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>mod2.commons</groupId> 
     <artifactId>mod2.commons.lang</groupId> 
     <version>${mod2.version}</version> 
     </dependency> 
     <dependency> 
     <groupId>mod2.commons</groupId> 
     <artifactId>mod2.commons.audit</groupId> 
     <version>${mod2.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 
</project> 

總括來說 - 我想從7.169.72.8版本mod2的3.2版本,但我可以在mod2的2.3版本從serenity回購拉。謝謝你的幫助。

+1

Maven沒有理由在這裏尋找版本2.3,因爲版本明確3.2。雖然配置文件'default'沒有被激活,在設置中應該有一個'默認'。也就是說,即使這個配置文件沒有被激活,Maven也應該查看安靜回購,失敗,然後查看7.169.72.8(或者反過來,不知道鏡像是否有順序)。 – Tunaki

+0

正是我的想法。由於pom明確地說3.2,爲什麼它從'寧靜'(即2.3) – jiveturkey

+0

拉出來某個地方,版本正在被重新定義。你的依賴在一個'dependencyManagement'裏面,所以也許一個使用它的子項目將版本重新定義爲2.3?或者有一個系統屬性設置'mod2.version'? – Tunaki

回答

0

在您的配置中,您聲明瞭中央存儲庫的多個鏡像。但是,Maven does not support that

請注意,給定存儲庫最多隻能有一個鏡像。換句話說,您不能將單個存儲庫映射到一組定義相同值的鏡像。 Maven不會聚合鏡像,只是選擇第一場比賽。如果您想提供多個存儲庫的組合視圖,請改爲使用存儲庫管理器。

在你的情況,Maven是採摘中央的第一反射鏡,這是ID nexus,而忽略了第二個,這是ID mods的。因此,在獲取工件時,它只會搜索nexus並找不到它。

有幾個解決方案:

  • 如果你真的想爲同一個庫多個鏡像,你將需要使用一個repository manager和配置這在回購管理器本身。
  • 目前尚不清楚爲什麼您需要鏡像中央並指向7.169.72.8:8081如果此存儲庫沒有使您的構建工作所需的所有工件。如果其餘部分位於serenity.gm.edu上,則可以在serenity.gm.edu上承載所有這些文件。
  • 您也可以根本不使用mods鏡像。讓serenity.gm.edu成爲Central的鏡像,只需聲明一個不是Central的新存儲庫即可獲取您的工件。你已經宣佈mod-thirdpartymod-snapshots庫,所以這是根據與激活他們的個人資料的問題:

    <activeProfiles> 
        <activeProfile>default</activeProfile> 
    </activeProfiles> 
    
    settings.xml

    。有了這個,Maven還會在爲這些回購配置的URL上尋找您的工件(並且那些不會被nexus鏡像)。

+0

我無法控制回購協議,我曾經對那些人做過尖叫,所以我不得不選擇第3種方式。這意味着將7.169.72.8作爲鏡像作爲'settings.xml'中的回購協議,並添加「 activeProfile'? – jiveturkey

+0

@jnbbender正確。 – Tunaki

+0

我加了'activeProfile'但沒有成功。在'serenity'條目指定爲' *'之後,我再次將其作爲鏡像添加後,我終於能夠正常工作。所以我現在有2個鏡像和一個默認的'activeProfile'。 – jiveturkey

相關問題