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

Posted

技术标签:

【中文标题】我可以在命令行中添加 maven 存储库吗?【英文标题】:Can I add maven repositories in the command line? 【发布时间】:2010-09-09 10:04:21 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

你可以这样做,但你可能最好像其他人所说的那样在 POM 中这样做。

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

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

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

【讨论】:

这对于在发布前测试封闭的 sonatype 存储库很有用。 如何指定遥控器的用户名和密码? 也可以定义 MAVEN_OPTS 变量,这样就不需要每次调用 run maven 时都定义 -Dmaven.repo.local。 也可以定义MAVEN_OPTS变量,避免每次运行maven时设置这个参数。有关示例,请参阅 ***.com/questions/16591080/…。 在 maven 3 中不起作用。我在较新的 maven 中找不到从命令行设置远程 repo 的选项【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

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

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

【讨论】:

【参考方案6】:

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

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

所以你的设置文件中有 $maven.repository,然后像上面一样使用 -Dmaven.repository。

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

【讨论】:

-Dmaven.repo.remote 似乎不适用于较新版本的 Maven。我知道 XML 设置更好,但我希望在我无法控制的服务器上运行构建的选项 :(【参考方案7】:

我不确定您是否可以使用命令行来执行此操作。另一方面,您可以在 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 存储库吗?的主要内容,如果未能解决你的问题,请参考以下文章

在命令行中使用 maven 编译整个项目后如何运行单个类? [复制]

是否可以在命令行中在 Maven Deploy 中传递密码?

maven常用命令行总结

如何在 Maven 项目的命令行中禁用 jar 创建?

我可以在 msbuild 命令行中添加条件定义吗?

我可以在 git 的一个命令中推送到多个存储库吗?