Sonatype Nexus: как установить учетные данные одного сервера для нескольких репозиториев в настройках maven.в XML?

У нас есть несколько репозиториев в Nexus (т. е. выпуски, моментальный снимок и сайт). Все 3 репозитория находятся в общедоступной группе, и пользователи используют одинаковые учетные данные для доступа ко всем этим репозиториям. Предоставление того же имени пользователя и пароля в настройках.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>  

3 ответов


просто используйте одну запись в настройках.xml, как это

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

а затем в distributionManagement в вашем pom.xml вы используете что-то вроде этого

<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 книга примеры проекта, которые используются в руководстве судебного разбирательства. Конечно, вы можете добавить сайт с тем же идентификатором. Имейте в виду, что нет никаких проблем, если id;s такие же, как они просто детализируют идентификатор серверного элемента в параметры для поиска и не являются элементом id для репозитория. Имхо это должно называться serverId или что-то более ясное, но это другая история.


Не решение, а обходной путь:

настройки.xml будет обрабатывать системные свойства и переменные среды. Поэтому, если вы не беспокоитесь о том, чтобы поместить данные аутентификации сервера в сценарий или в свою среду, вы можете придерживаться трех учетных данных сервера, но устранить необходимость обновления всех трех из них в пользу обновления вашего сценария или сред (я привел примеры для обоих вариантов в этом фрагменте):

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

к сожалению там нет <properties> элемент поддерживается в настройках.в XML!

в сторону: maven уже обрабатывает моментальные снимки и выпускает репозитории в nexus, и это лучший способ сделать что-то. Ваши опубликованные настройки.xml даже позволяет их уже. Зачем нужны отдельные записи репозитория для моментальных снимков и выпусков?


похоже, вы ошибаетесь. Данные учетные данные и id предназначены для управления распределением, а не для доступа к Nexus в этом случае. Кроме того, вам нужно три разных имени пользователя, комбинации паролей, потому что у вас есть три возможных вещи выпускает, снимки и сайт. Так что ничего страшного.

Aprt из этого я бы предложил обновить Maven в Maven 3.X линия причина Maven 2.2.1 немного из дата.