2008-09-16 77 views
44

我知道我可以添加Maven倉庫來獲取〜/ .m2/settings.xml中的依賴關係。但是,它可以使用命令行添加存儲庫,像這樣:我可以在命令行中添加Maven存儲庫嗎?

mvn install -Dmaven.repository=http://example.com/maven2 

我想這樣做的原因是因爲我使用的是持續集成工具,我有過的命令行選項完全控制它用來調用maven,但是爲運行集成工具的用戶管理settings.xml有點麻煩。

回答

57

你可以做到這一點,但你可能最好在POM中做其他人所說的。

在命令行上,您可以爲本地存儲庫指定一個屬性,爲遠程存儲庫指定另一個存儲庫。遠程存儲庫將具有所有默認設置,但

下面的示例指定了兩個遠程存儲庫和一個自定義本地存儲庫。

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
    -Dmaven.repo.local="c:\test\repo" 
+8

看起來像這不適用於maven2,或者我錯了嗎? – 2012-02-29 20:29:02

3

我不確定您是否可以使用命令行來執行此操作。另一方面,您可以在pom.xml中添加存儲庫,如下例所示。使用此方法,您不需要更改文件〜/ .m2/settings.xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
    <project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    ... 
    <repositories> 
      <repository> 
       <id>MavenCentral</id> 
       <name>Maven repository</name> 
       <url>http://repo1.maven.org/maven2</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository> 
... 
      <repository> 
       <id>Codehaus Snapshots</id> 
       <url>http://snapshots.repository.codehaus.org/</url> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </repository> 
     </repositories> 

    ... 

     <pluginRepositories> 
      <pluginRepository> 
       <id>apache.snapshots</id> 
       <name>Apache Snapshot Repository</name> 
       <url> 
        http://people.apache.org/repo/m2-snapshot-repository 
       </url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </pluginRepository> 
      <pluginRepository> 
       <id>Codehaus Snapshots</id> 
       <url>http://snapshots.repository.codehaus.org/</url> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
      </pluginRepository> 
     </pluginRepositories> 

    ... 

    </project> 
1

我還沒有真正使用的Maven 2之前,我們的系統仍在工作Maven的1.x中,因爲與Maven的一些問題2.

然而,看着文檔的Maven 2似乎沒有任何特定的系統屬性。不過,你可以使用系統屬性在你的poms/settings中建立一個。請參閱系統屬性部分http://maven.apache.org/settings.html

因此,您需要在設置文件中使用$ {maven.repository},然後像上面那樣使用-Dmaven.repository。

我不確定這是否可以工作,但有一些調整,我相信你可以想出一些東西。

3

As @Jorge Ferreira 已經說過將你的存儲庫定義放在pom.xml中。使用profiles adittionally選擇庫通過命令行使用:

mvn deploy -P MyRepo2 

mvn deploy -P MyRepo1 
1

創建一個具有所需的存儲庫設置POM,然後使用父元素在你的項目的POM繼承附加倉庫。當一組項目屬於一個團隊時,使用「組織」POM還有其他好處。

5

Maven't項目對象模型(POM)的目標之一是捕獲所有可靠地再現工件所需的信息,因此傳遞影響工件創建的設置是非常令人沮喪的。

要實現您的目標,您可以在每個項目中檢入用戶級settings.xml文件,並使用-s(或--settings)選項將它傳遞給構建。

2

我在這裏假設你問這是因爲你偶爾想要爲你的構建添加一個新的第三方存儲庫。當然我可能是錯的...:)

在這種情況下,最好的辦法是使用託管代理,如artifactory或nexus。然後在settings.xml中進行一次性更改,將其設置爲世界的鏡像。

您需要從該點添加的任何第三方回購都可以通過代理進行處理。

相關問題