69

我知道我可以添加 maven 存储库以在 ~/.m2/settings.xml 中获取依赖项。但是是否可以使用命令行添加存储库,例如:

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

我想这样做的原因是因为我使用的是持续集成工具,我可以完全控制用于调用 maven 的命令行选项,但是为运行集成工具的用户管理 settings.xml 有点麻烦麻烦。

4

7 回答 7

78

您可以这样做,但正如其他人所说,您最好在 POM 中这样做。

在命令行上,您可以为本地存储库指定一个属性,并为远程存储库指定另一个存储库。远程存储库将具有所有默认设置

下面的示例指定了两个远程存储库和一个自定义本地存储库。

mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo 
  -Dmaven.repo.local="c:\test\repo"
于 2009-07-28T12:04:53.650 回答
8

Maven't Project Object Model (POM) 的目标之一是捕获可靠地再现工件所需的所有信息,因此强烈建议不要传递影响工件创建的设置。

为了实现您的目标,您可以在每个项目中签入您的用户级 settings.xml 文件,并使用 -s(或 --settings)选项将其传递给构建。

于 2008-09-18T20:46:23.813 回答
6

我不确定您是否可以使用命令行来执行此操作。另一方面,您可以在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>
于 2008-09-16T10:45:43.883 回答
3

正如@Jorge Ferreira 已经说过的,将您的存储库定义放在 pom.xml 中。额外使用配置文件通过命令行选择要使用的存储库:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1
于 2008-09-18T18:45:26.663 回答
3

我在这里假设你问这个问题是因为你偶尔想在你的构建中添加一个新的 3rd-party 存储库。我当然可能是错的...... :)

在这种情况下,最好的选择是使用托管代理,例如 artifactory 或 nexus。然后在 settings.xml 中进行一次性更改,将其设置为世界的镜像。

从那时起您需要添加的任何第 3 方存储库都可以通过代理进行处理。

于 2010-01-09T01:14:34.567 回答
2

我之前没有真正使用过 maven 2,由于 maven 2 的一些问题,我们的系统仍在使用 maven 1.x。

但是,查看 maven 2 的文档,似乎没有任何特定的 System 属性。但是,您可能可以使用系统属性在您的 poms/设置中构建一个。请参阅此http://maven.apache.org/settings.html的系统属性部分

因此,您的设置文件中有 ${maven.repository} ,然后像上面一样使用 -Dmaven.repository 。

我不确定这是否可行,但通过一些调整,我相信你可以想出一些东西。

于 2008-09-16T10:54:37.203 回答
1

创建具有所需存储库设置的 POM,然后使用项目 POM 中的父元素继承其他存储库。当一组项目属于一个团队时,使用“组织”POM 还有其他几个好处。

于 2008-09-18T18:58:43.263 回答