18

我可以在 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文件中的所有四个条目

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

谢谢, 埃亚尔

4

3 回答 3

9

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

代替

<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。

于 2013-07-07T13:00:16.537 回答
2

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

于 2014-12-05T12:25:58.363 回答
1

因为每个存储库定义都应该有唯一的 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

于 2021-01-11T20:26:38.387 回答