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

时间:2014-02-17 18:24:39

标签: maven nexus sonatype

我们在Nexus中有多个存储库(即版本,快照和站点)。所有3个repos都在公共组下,用户使用相同的凭据访问所有这些存储库。在settings.xml中为每个存储库提供相同的用户名和密码会使其变得多余且难以维护。

您能否建议一种优雅的方式来描述所有3个存储库的一个服务器凭据?

非常感谢任何帮助。

我们正在使用maven 2.2.1和Nexus OSS 2.7.1

这是我的settings.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>  

3 个答案:

答案 0 :(得分:11)

只需在setttings.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或更清楚的东西,但这是一个不同的故事。

答案 1 :(得分:3)

不是解决方案,而是解决方法:

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甚至已经启用它们。为什么需要快照和版本的单独存储库条目?

答案 2 :(得分:1)

看起来你错了。给定的凭据和ID用于distributionManagement,而不是在这种情况下访问Nexus。除此之外,您需要三个不同的用户名,密码组合会导致您有三种可能的内容发布快照网站。所以没什么大不了的。

Aprt,我建议将Maven升级到Maven 3.X行,因为Maven 2.2.1有点过时了。