2008-09-16 78 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中进行一次性更改,将其设置为世界的镜像。

您需要从该点添加的任何第三方回购都可以通过代理进行处理。

相关问题