在Maven中为多个存储库设置单个服务器凭据

时间:2013-07-07 10:47:49

标签: maven credentials nexus

我可以在Maven settings.xml中使用单个服务器凭据创建多个存储库吗?

我们正在使用Maven 3.0.4将工件部署到Nexus pro 2.2.1版

我们在同一台服务器上有多个存储库,用户使用相同的凭据访问所有这些存储库。

settings.xml具有相同凭据的多个存储库:

<repositories>
<repository>
   <id>Staging-group</id>
   <url>http://server/nexus/content/groups/Staging-group</url>
<repository>
   <id>RELEASES</id>
   <url>http://server/nexus/content/repositories/RELEASES</url>
</repository>
<repository>
   <id>INTERNALS</id>
   <url>http://server/nexus/content/repositories/INTERNALS</url>
</repository>
<repository>
   <id>SNAPSHOTS</id>
   <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>
</repositories>
.....
<servers>
<server>
   <id>Staging-group</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>RELEASES</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>SNAPSHOTS</id>
   <username>user</username>
   <password>password</password>
</server>
<server>
   <id>INTERNALS</id>
   <username>user</username>
   <password>password</password>
</server>
</servers>

Nexus使用Active Directory身份验证。因此,每次用户更改其Windows密码时,他们都需要更改settings.xml文件中的所有四个条目

有没有办法为所有存储库声明一次凭证?

谢谢, 的Eyal

3 个答案:

答案 0 :(得分:6)

是的,至少我相信这应该有用。

而不是

<repository>
   <id>SNAPSHOTS</id>
   <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>

使用

<repository>
  <id>nexus</id>
  <name>SNAPSHOTS</name>
  <url>http://server/nexus/content/repositories/SNAPSHOTS</url>
</repository>

然后只需将nexus作为您的服务器ID。

答案 1 :(得分:0)

似乎我不能发表评论,因为我没有足够的经验。好像:)但是,关于警告profiles.profile[development].repositories.repository.id必须是唯一的,我发现这是两个settings.xml文件被找到。一个在maven安装中${maven-install}/conf/settings.xml以及~/.m2/settings.xml中的一个。决定你想要哪一个并清理另一个。

答案 2 :(得分:0)

因为每个存储库定义都应该有唯一的 id - 并且 id 必须与服务器部分连接,所以不能为多个存储库使用一台服务器。

尝试将用户名和密码放在属性中也没有预期的结果,因为 setting.xml 中定义的属性未在同一个 settings.xml 中解析

但是我们可以用用户名和密码定义环境变量并在settings.xml中使用它

所以我们可以在 settings.xml 中:

<server>
   <id>Staging-group</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>
<server>
   <id>RELEASES</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>
<server>
   <id>SNAPSHOTS</id>
   <username>${env.MVN_USER}</username>
   <password>${env.MVN_PASS}</password>
</server>

现在我们必须在某处定义使用过的环境变量,我们可以为其使用 ~/.mavenrc 以便此变量仅适用于 maven。

~/.mavenrc 示例

export MVN_USER=user
export MVN_PASS=pass

这种解决方法使我们可以在一个地方为多个存储库定义用户名和密码。

使用 maven 3.6.3 进行测试