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

时间:2020-03-05 18:55:34  来源:igfitidea点击:

我知道我可以在〜/ .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 2,由于Maven 2的某些问题,我们的系统仍在Maven 1.x上运行。

但是,查看maven 2的文档,似乎没有类似的任何特定System属性。但是,我们可以使用"系统"属性将其内置到poms /设置中。请参阅此http://maven.apache.org/settings.html的"系统属性"部分

因此,我们将在设置文件中包含$ {maven.repository},然后像上面一样使用-Dmaven.repository。

我不确定这是否行得通,但是通过一些调整,我确定我们可以提出一些建议。

回答

作为
@乔治·费雷拉
已经说过将存储库定义放在pom.xml中。适当地使用概要文件来选择要通过命令行使用的存储库:

mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

回答

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

回答

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

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

回答

我们可以执行此操作,但是最好像其他人所说的那样在POM中执行此操作。

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

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

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

回答

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

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

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