我可以在命令行中添加maven存储库吗?
-
09-06-2019 - |
题
我知道我可以添加 Maven 存储库来获取 ~/.m2/settings.xml 中的依赖项。但是是否可以使用命令行添加存储库,例如:
mvn install -Dmaven.repository=http://example.com/maven2
我想这样做的原因是因为我使用的是持续集成工具,我可以完全控制它用来调用 maven 的命令行选项,但是为运行集成工具的用户管理 settings.xml 有点麻烦的一个麻烦。
解决方案
您可以这样做,但正如其他人所说,在 POM 中这样做可能会更好。
在命令行上,您可以为本地存储库指定一个属性,为远程存储库指定另一个存储库。不过,远程存储库将具有所有默认设置
下面的示例指定两个远程存储库和一个自定义本地存储库。
mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo
-Dmaven.repo.local="c:\test\repo"
其他提示
Maven 项目对象模型 (POM) 的目标之一是捕获可靠地重现工件所需的所有信息,因此强烈建议不要传递影响工件创建的设置。
为了实现您的目标,您可以签入每个项目的用户级 settings.xml 文件,并使用 -s (或 --settings)选项将其传递给构建。
我不确定您是否可以使用命令行来完成此操作。另一方面,您可以在 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>
正如@Jorge Ferreira已经说过的那样,将您的存储库定义放在pom.xml中。使用 简介 另外通过命令行选择要使用的存储库:
mvn deploy -P MyRepo2
mvn deploy -P MyRepo1
我在这里假设您问这个问题是因为您偶尔想要向您的构建添加新的第 3 方存储库。当然我可能是错的...:)
在这种情况下,最好的选择是使用托管代理,例如artifactory或nexus。然后在 settings.xml 中进行一次性更改,将其设置为世界的镜子。
从那时起您需要添加的任何第 3 方存储库都可以通过代理进行处理。
我之前没有真正使用过maven 2,由于maven 2存在一些问题,我们的系统仍在maven 1.x上运行。
然而,查看 maven 2 的文档似乎没有任何特定的系统属性。但是,您可能可以使用系统属性将其构建到您的 poms/设置中。请参阅系统属性部分 http://maven.apache.org/settings.html
因此,您的设置文件中有 ${maven.repository} ,然后像上面一样使用 -Dmaven.repository 。
我不确定这是否可行,但通过一些调整,我相信你可以想出一些东西。
创建一个具有所需存储库设置的 POM,然后使用项目 POM 中的父元素来继承其他存储库。当一组项目属于一个团队时,使用“组织”POM 还有其他一些好处。