как получить архетипы maven из моего собственного аутентифицированного нексуса без имени пользователя и пароля в URL-адресе?

У меня есть частный Nexus с репозиторием, защищенным аутентификацией.

Извлечение библиотек работает как шарм, но если я хочу использовать один из хранящихся там архетипов, мне всегда нужно писать имя пользователя и пароль открытым текстом в URL-адресе каталога архетипов, например:

mvn archetype:generate -DarchetypeCatalog=http://username:[email protected]/nexus/content/repositories/myrepo/archetype-catalog.xml

Я прочитал http://maven.apache.org/archetype/maven-archetype-plugin/faq.html#authentication и обновил мой settings.xml тем, что я понял из этой очень маленькой справки:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <servers>
    <server>
      <id>myrepo</id>
      <username>username</username>
      <password>{HASHED_PASSWORD}</password>
    </server>
    <server>
      <id>pretty-archetype-unicorn-repo</id>
      <username>username</username>
      <password>{HASHED_PASSWORD}</password>
    </server>
  </servers>

  <profiles>
   <profile>
     <id>someid</id>
     <repositories>
       <repository>
         <id>myrepo</id>
         <name>My Repo</name>
         <url>http://maven.mycompany.com/nexus/content/repositories/myrepo/</url>
       </repository>
     </repositories>
   </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>someid</activeProfile>
  </activeProfiles>

</settings>

Излишне говорить, что это не работает, и когда я пытаюсь:

mvn archetype:generate -DarchetypeCatalog=http://maven.mycompany.com/nexus/content/repositories/myrepo/archetype-catalog.xml

Я получаю то же самое:

[WARNING] Error reading archetype catalog http://maven.mycompany.com/nexus/content/repositories/myrepo/archetype-catalog.xml
org.apache.maven.wagon.authorization.AuthorizationException: Access denied to: http://maven.mycompany.com/nexus/content/repositories/myrepo/archetype-catalog.xml

Любые подсказки или лучшая документация с рабочим примером?


person William Ghelfi    schedule 11.02.2013    source источник


Ответы (3)


В настоящее время нет способа сделать это, если вы не укажете хотя бы -DarchetypeArtifactId. Согласно официальным документам, которые вы связали:

The server id used to download the artifact is [archetypeArtifactId]-repo

следовательно, нет возможности просто просмотреть каталог, если он защищен паролем (и вы не хотите раскрывать имя пользователя/пароль в истории своей оболочки).

А пока вы можете проголосовать за ARCHETYPE-204. У них есть патч, доступный уже много лет, им, вероятно, просто нужно немного подтолкнуть.

ОБНОВЛЕНИЕ

Изучение исходный код проекта архетипа maven, похоже, что следующий фрагмент в settings.xml может вам подойти:

<servers>
    <server>
      <id>archetype</id>
      <username>${your username}</username>
      <password>${your password}</password>
    </server>
</servers>

При создании объекта Repository при получении удаленного каталога используется идентификатор по умолчанию archetype. Я не думаю, что это официальный способ справиться с такими ситуациями, и это немного грязно, ИМО. Но это все еще может работать для вас :-)

Кроме того, вы должны иметь возможность устанавливать профили для повторного использования archetype ID для разных серверов.

person skuro    schedule 13.02.2013
comment
Звучит многообещающе, спасибо. Я попробую как можно скорее и сообщу о своих выводах! - person William Ghelfi; 13.02.2013
comment
@NicolasMommaerts Мне тоже не повезло. Я проголосовал за ошибку и написал комментарий. Другой вариант — использовать MAVEN_OPTS с этим -DarchetypeCatalog=..., но довольно грязным обходным решением. - person Lukino; 23.10.2015

Я думаю, это должно быть в вашем settings.xml

<servers>
    <server>
      <id>myrepo</id>
      <username>${your username}</username>
      <password>${your password}</password>
    </server>
</servers>

вам нужно добавить <server> для каждого из защищенных паролем репозиториев.

person Tejas    schedule 17.07.2013

Похоже, это известная проблема, и вы не можете использовать архетипы из защищенного репозитория. См. https://issues.apache.org/jira/browse/ARCHETYPE-204

Доступен обходной путь, выполнив следующие действия:

mvn archetype:generate -DarchetypeCatalog=https://username:[email protected]/nexus/content/repositories/myrepo/
person gamerson    schedule 13.02.2014