Каталог архетипов Maven: укажите пользовательские местоположения

Я развертываю репозиторий Nexus для Maven и пользовательские архетипы.

Я хотел бы выполнить mvn archetype:generate и получить список внутренних + пользовательских архетипов.

Единственный способ, который я нашел для запроса пользовательских архетипов (эргономичным способом, то есть без URL-адреса), — это определить путь каталога архетипов как свойство в настройках. Это недопустимое решение, потому что мне нужно несколько каталогов (и это свойство нельзя переопределить в CLI).

Кто-нибудь знает, как это сделать?

Заранее спасибо,


[EDIT] Я нашел отчет о проблеме, связанный с: http://jira.codehaus.org/browse/ARCHETYPE-273

И я заметил, что во время archetype:generate maven пытается добраться до центрального репозитория:

[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2/archetype-catalog.xml
[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2

Это заканчивается «Время ожидания подключения истекло», потому что я не указывал (и не хочу) прокси-сервер...

Я не понимаю, почему maven не проверяет каталог нексуса...


person Benjamin    schedule 06.07.2011    source источник
comment
какие-нибудь Новости? Вот у меня такая же проблема :(   -  person Ruben    schedule 12.04.2013


Ответы (3)


У меня также есть Nexus, настроенный для зеркалирования репозиториев Maven и, следовательно, удаленного каталога.

<mirror>
    <!--This sends everything else to /public -->
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://afbwt03:8081/nexus/content/groups/JavaRepo/</url>
</mirror>

и:

<profile>
    <id>nexus</id>
    <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>

Я могу получить доступ к удаленному каталогу только тогда, когда использую следующую командную строку Maven:

mvn archetype:generate -DarchetypeCatalog=http://afbwt03:8081/nexus/content/groups/JavaRepo

Если я не определю переменную archetypeCatalog, я получу то же поведение, что и вы: попытаюсь получить доступ к repo1. ... хотя некоторые зеркала настроены.

person leroyse    schedule 21.09.2011
comment
К сожалению, начиная с Maven 3 (я полагаю), передача URL-адреса или имени файла каталога в командной строке в mvn archetype:generate -DarchetypeCatalog=... больше невозможна. Поддерживаются только локальные, удаленные и внутренние, и конфигурация должна происходит в settings.xml. - person Alexander Klimetschek; 08.01.2018

Тебе нужно иметь

  • свойство archetypeRepository, определенное в активном профиле в вашем .m2/settings.xml

  • репозитории и pluginRepositories перенаправляются на ваше зеркало с тем же идентификатором «central».

  • и, конечно же, зеркало определило

Документация Apache maven по плагину archetype указывает, что archetypeRepository является определяемым пользовательским свойством: http://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html

Ваш .m2/settings.xml должен содержать эти минимальные элементы

<?xml version="1.0" encoding="UTF-8"?>

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


  <mirrors>
      <mirror>
        <id>central</id>
        <name>Mirror for maven central</name>
        <url>http://mymvnhost:8081/nexus/content/groups/public/</url>
        <mirrorOf>*</mirrorOf>
      </mirror>

  </mirrors>

  <profiles>
    <profile>
      <id>dev</id>

        <properties>
        <archetypeRepository>http://mymvnhost:8081/nexus/content/groups/public/</archetypeRepository>
        </properties>

        <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>
    <activeProfile>dev</activeProfile>
  </activeProfiles>
</settings>
person Blessed Geek    schedule 25.10.2015

С maven-archetype-plugin:3.1.1 вы должны

  • добавьте/отредактируйте archetype-catalog.xml в своем репозитории, чтобы перечислить ваши собственные архетипы
  • отредактируйте свой settings.xml, чтобы добавить этот репозиторий с идентификатором archetype.
  • вызывать mvn archetype:generate -DarchetypeCatalog=remote

Из https://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html :

Если вы хотите, чтобы каталоги поступали из другого репозитория, добавьте в файл settings.xml следующее:

<repository>
  <id>archetype</id>
  <url>https://repository.domain.com/path/to/repo/</url>
</repository>
person Gery    schedule 26.06.2019