Java 我可以在命令行中添加maven存储库吗?

Java 我可以在命令行中添加maven存储库吗?,java,maven-2,build-process,Java,Maven 2,Build Process,我知道我可以在~/.m2/settings.xml中添加maven存储库来获取依赖项。但是否可以使用命令行添加存储库,例如: mvn install -Dmaven.repository=http://example.com/maven2 我之所以要这样做,是因为我使用的是一个持续集成工具,我可以完全控制它用来调用maven的命令行选项,但是为运行集成工具的用户管理settings.xml有点麻烦。我不确定是否可以使用命令行来完成。另一方面,您可以在pom.xml中添加存储库,如下例所示。使用

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

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

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

我不确定是否可以使用命令行来完成。另一方面,您可以在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>

...
中央的
Maven存储库
http://repo1.maven.org/maven2
真的
假的
...
科德豪斯快照
http://snapshots.repository.codehaus.org/
真的
假的
...
apache.snapshots
Apache快照存储库
http://people.apache.org/repo/m2-snapshot-repository
假的
科德豪斯快照
http://snapshots.repository.codehaus.org/
真的
假的
...

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

然而,看看maven 2的文档,似乎没有任何这样的特定系统属性。但是,您可能可以使用系统属性将其构建到poms/设置中。请参阅本部分的系统属性

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

我不确定这是否可行,但经过一些调整,我相信你可以想出一些办法。

@豪尔赫·费雷拉 已经说过,将您的存储库定义放在pom.xml中。通过命令行选择要使用的存储库:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

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

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


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

你可以这样做,但正如其他人所说,在POM中这样做可能会更好

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

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

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

在这里,我假设您问这个问题是因为您偶尔希望向构建中添加一个新的第三方存储库。我可能错了,当然……:)

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


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

这对于在发布之前测试封闭的sonatype回购非常有用。如何为远程设备指定用户名和密码?还可以定义MAVEN_OPTS变量,这样您就不必每次调用run MAVEN时都定义-Dmaven.repo.local。您可以还要定义MAVEN_OPTS变量,以避免每次运行MAVEN时都设置此参数。有关一些示例,请参见。在maven 3中不起作用。在较新的maven
中,我找不到从命令行设置远程repo的选项-Dmaven.repo.remote
似乎不适用于较新版本的maven。我知道XML设置更好,但我希望在我无法控制的服务器上运行构建时使用该选项:(