[英]Maven command line to exclude download from a list of remote repositories by names
[英]Can I add maven repositories in the command line?
我知道我可以添加 maven 存储库以获取 ~/.m2/settings.xml 中的依赖项。 但是是否可以使用命令行添加存储库,例如:
mvn install -Dmaven.repository=http://example.com/maven2
我想这样做的原因是因为我使用的是持续集成工具,我可以完全控制用于调用 maven 的命令行选项,但管理设置。对于运行集成工具的用户来说,xml 有点麻烦。
你可以做到这一点,但你可能会更好地在POM中这样做,正如其他人所说的那样。
在命令行上,您可以指定本地存储库的属性,以及远程存储库的另一个存储库。 远程存储库将具有所有默认设置
以下示例指定了两个远程存储库和一个自定义本地存储库。
mvn package -Dmaven.repo.remote=http://www.ibiblio.org/maven/,http://myrepo
-Dmaven.repo.local="c:\test\repo"
Maven't Project Object Model(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>
我在这里假设你问这个,因为你偶尔想要为你的构建添加一个新的第三方存储库。 我当然可能错了...... :)
在这种情况下,您最好的选择是使用托管代理,例如artifactory或nexus。 然后在settings.xml中进行一次性更改,将其设置为世界的镜像。
您需要从该点添加的任何第三方存储库都可以通过代理进行处理。
正如@Jorge Ferreira已经说过将您的存储库定义放在pom.xml中。 adittionally使用配置文件选择要通过命令行使用的存储库:
mvn deploy -P MyRepo2
mvn deploy -P MyRepo1
我之前没有真正使用过maven 2,因为maven 2存在一些问题,我们的系统仍然在使用maven 1.x。
但是,查看maven 2的文档似乎没有任何特定的系统属性。 但是,您可以使用系统属性在您的poms / settings中构建一个。 请参阅此http://maven.apache.org/settings.html的系统属性部分
所以你的设置文件中有$ {maven.repository},然后像上面那样使用-Dmaven.repository。
我不确定这是否有用,但经过一些调整我相信你能想出一些东西。
创建具有所需存储库设置的POM,然后在项目POM中使用父元素继承其他存储库。 当一组项目属于一个团队时,使用“组织”POM还有其他一些好处。
我正在使用xmlstarlet
来实现这一点。 在 CentOS 7 上测试 Maven 3,Maven 2 尚未测试。
XML_FULLPATH="$HOME/.m2/settings.xml"
MIRROR_ID='example'
MIRROR_MIRROROF='*'
MIRROR_NAME='Example Mirror'
MIRROR_URL='http://example.com/maven2'
## Preview settings without comment:
xmlstarlet ed -d '//comment()' "$XML_FULLPATH"
## Add Mirror settings:
xmlstarlet ed -L \
--subnode "/_:settings/_:mirrors" --type elem --name "mirrorTMP" --value "" \
--subnode "/_:settings/_:mirrors/mirrorTMP" --type elem --name "id" --value "$MIRROR_ID" \
--subnode "/_:settings/_:mirrors/mirrorTMP" --type elem --name "mirrorOf" --value "$MIRROR_MIRROROF" \
--subnode "/_:settings/_:mirrors/mirrorTMP" --type elem --name "name" --value "$MIRROR_NAME" \
--subnode "/_:settings/_:mirrors/mirrorTMP" --type elem --name "url" --value "$MIRROR_URL" \
--rename "/_:settings/_:mirrors/mirrorTMP" --value "mirror" \
"$XML_FULLPATH"
## Remove Mirror settings by id:
xmlstarlet ed -L \
--delete "/_:settings/_:mirrors/_:mirror[_:id=\"$MIRROR_ID\"]" \
"$XML_FULLPATH"
这个想法来自:如何使用 xmlstarlet 在另一个元素下插入一个新元素? .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.