Sonatype Nexus:如何在maven的settings.xml中为多个存储库设置单个服务器凭据?

px9o7tmv  于 2023-10-17  发布在  Maven
关注(0)|答案(4)|浏览(137)

我们在Nexus中有多个存储库(即版本、快照和站点)。所有3个仓库都在公共组下,用户使用相同的凭据访问所有这些仓库。在settings.xml中为每个存储库提供相同的用户名和密码会使它们变得多余且难以维护。
你能建议一个优雅的方式来描述所有3个存储库的一个服务器凭证吗?
任何帮助都非常感谢。
我们正在使用maven 2.2.1和Nexus OSS 2.7.1

这里是我的设置.xml

<settings>    
<servers>   
<server>   
    <id>snapshot</id>   
    <username>deployment</username>   
    <password>deployment123</password>      
</server>  
<server>   
       <id>release</id>   
       <username>deployment</username>  
       <password>deployment123</password>      
</server>  
<server>  
      <id>site</id>  
      <username>deployment</username>  
      <password>deployment123</password>   
</server>  
 </servers>  
  <mirrors>  
    <mirror>  
      <!--This sends everything else to /public -->  
      <id>nexus</id>  
      <mirrorOf>*</mirrorOf>  
      <url>http://localhost:8081/nexus/content/groups/public</url>  
    </mirror>  
  </mirrors>  
  <profiles>  
    <profile>  
      <id>nexus</id>  
      <!--Enable snapshots for the built in central repo to direct -->  
      <!--all requests to nexus via the mirror -->  
      <repositories>  
        <repository>  
          <id>central</id>  
          <url>http://central</url>  
          <releases><enabled>true</enabled></releases>  
          <snapshots><enabled>true</enabled></snapshots>  
        </repository>  
      </repositories>  
      <pluginRepositories>  
        <pluginRepository>  
          <id>central</id>  
          <url>http://central</url>  
          <releases><enabled>true</enabled></releases>  
          <snapshots><enabled>true</enabled></snapshots>  
        </pluginRepository>  
       </pluginRepositories>  
 </profile>  
  </profiles>  
  <activeProfiles>  
    <!--make the profile active all the time -->  
    <activeProfile>nexus</activeProfile>  
  </activeProfiles>  
</settings>
gpfsuwkq

gpfsuwkq1#

只需像这样在settings.xml中使用一个条目

<server>   
    <id>nexus</id>   
    <username>deployment</username>   
    <password>deployment123</password>      
</server>

然后在pom.xml的distributionManagement中使用类似的东西,

<distributionManagement>
<repository>
  <id>nexus</id>
  <name>Nexus Releases</name>
  <url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
  <id>nexus</id>
  <name>Nexus Snapshot</name>
  <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

要获得完整的工作设置,请查看试用指南中使用的Nexus Book Examples project。当然,您也可以添加具有相同ID的站点。请记住,如果ID没有问题; s是相同的,因为它们只是详细描述了要查找的设置中的服务器元素的标识符,而不是存储库的id元素。Imho它应该被称为serverId或更清楚的东西,但这是一个不同的故事。

7gcisfzg

7gcisfzg2#

这不是一个解决方案,而是一个解决方案:
settings.xml将handle system properties and environment variables。因此,如果你不担心将服务器身份验证细节放在脚本或环境中,你可以坚持使用三个服务器凭据,但不需要更新所有三个凭据,而是更新你的脚本或环境(我在这个片段中为两个选项提供了示例):

<servers>
  <server>
    <id>releases</id>
    <username>${env.NEXUS_USERNAME}</username> <!-- Env var -->
    <password>${nexus.password}</password> <!-- System (-D) var -->
  </server>
  <server>
    <id>snapshots</id>
    <username>${env.NEXUS_USERNAME}</username> <!-- Env var -->
    <password>${nexus.password}</password> <!-- System (-D) var -->
  </server>
  <server>
    <id>site</id>
    <username>${env.NEXUS_USERNAME}</username> <!-- Env var -->
    <password>${nexus.password}</password> <!-- System (-D) var -->
  </server>
</servers>

不幸的是,settings.xml中不支持<properties>元素!
旁白:maven已经在nexus中处理快照和发布仓库,这是更好的方式。您发布的settings.xml甚至已经启用了它们。为什么快照和版本需要单独的存储库条目?

qpgpyjmq

qpgpyjmq3#

看来你搞错了在这种情况下,给定的凭据和ID用于分发管理,而不是用于访问Nexus。除此之外,你需要三个不同的用户名,密码组合,因为你有三个可能的事情版本快照网站。所以没什么大不了的。
从那以后,我建议将Maven升级到Maven 3.X系列,因为Maven 2.2.1有点过时了。

zi8p0yeb

zi8p0yeb4#

您可以在服务器ID中使用镜像的ID:

<servers>
    <server>
        <id>nexus</id>
        <username>USERNAME</username>
        <password>PASSWORD</password>
    </server>
</servers>
<mirrors>
    <mirror>
        <id>nexus</id>
        <mirrorOf>*</mirrorOf>
        <url>http://localhost:8081/nexus/content/groups/public</url>  
    </mirror>  
</mirrors>

相关问题