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

时间:2008-09-16 10:28:37

标签: java maven-2 build-process

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

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

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

7 个答案:

答案 0 :(得分:68)

你可以做到这一点,但你可能会更好地在POM中这样做,正如其他人所说的那样。

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

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

作为 @Jorge Ferreira 已经说过将您的存储库定义放在pom.xml中。使用profiles adittionally选择要通过命令行使用的存储库:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

答案 4 :(得分:3)

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

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

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

答案 5 :(得分:2)

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

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

的系统属性部分

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

我不确定这是否有用,但经过一些调整我相信你可以提出一些建议。

答案 6 :(得分:1)

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