关于Java:是否可以在命令行中添加Maven存储库?

关于Java:是否可以在命令行中添加Maven存储库?

Can I add maven repositories in the command line?

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

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

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


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

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

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

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

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

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


我不确定是否可以使用命令行来完成。另一方面,您可以按照以下示例在pom.xml中添加存储库。使用这种方法,您无需更改?/ .m2 / settings.xml文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    <?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>

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

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

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



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

1
2
3
mvn deploy -P MyRepo2

mvn deploy -P MyRepo1

我以前还没有真正使用过maven 2,由于maven 2的某些问题,我们的系统仍在maven 1.x上运行。

但是,看一下maven 2的文档,似乎并没有类似的特定系统属性。但是,您可能可以使用System属性将其内置到poms /设置中。请参阅此http://maven.apache.org/settings.html

的系统属性部分

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

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


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


推荐阅读