我可以在命令行中添加Maven存储库吗?
我知道我可以在〜/ .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中进行一次更改,以将其设置为世界的镜像。
从那时起,我们需要添加的任何第三方存储库都可以通过代理进行处理。