Может ли Nexus / Artifactory хранить копию интернет-артефакта Maven?

Я хотел бы, чтобы Nexus (или Artifactory, мы еще не решили) хранил копию артефакта, когда он загружается из общедоступного репозитория в Интернете (например, Maven Central).

В принципе, если у вас нет банки в вашем локальном репо, и у менеджера репо ее тоже нет, я хочу попросить менеджера репо для банки, отправить его мне и сохранить как в репо менеджер и в моем локальном репо. Затем, когда другой человек запрашивает у диспетчера репо ту же самую банку, он отправляет ее им от диспетчера репо, и они сохраняют ее в своем локальном репо, без необходимости обращаться в центральный центр Maven.

Похоже, что это должно работать из коробки, но я этого не вижу. Я могу видеть артефакты в Maven central через диспетчер репо, но когда я использую Netbeans для добавления зависимости к моему проекту, он загружает его прямо из Maven central (по-видимому). В диспетчере репо ничего не кешируется (насколько я понимаю).


person Buns of Aluminum    schedule 25.09.2009    source источник


Ответы (3)


В Nexus есть концепция репозитория прокси, который делает почти то, что вы описываете. См. Раздел книги Проксирование общедоступных репозиториев для Детали.

В Artifactory есть аналогичная функция, которая называется Виртуальные репозитории.

Проксирование и кэширование удаленного общедоступного репозитория может ускорить ваши сборки за счет сокращения избыточных загрузок через общедоступный Интернет. Если разработчику в вашей организации необходимо загрузить версию 2.5 Spring Framework, а вы используете Nexus, зависимости (и зависимости зависимостей) необходимо загрузить из удаленного репозитория только один раз. При высокоскоростном подключении к Интернету это может показаться незначительной проблемой, но если вы постоянно просите своих разработчиков загрузить сотни мегабайт сторонних зависимостей, реальная экономия будет заключаться в том времени, которое потребуется Maven для проверьте наличие новых версий зависимостей и загрузите зависимости через общедоступный Интернет.

Вы можете остановить установку Maven от попыток подключения к Central, настроив диспетчер репозитория в качестве зеркала централизованного хранилища, а затем запросы в центральный сервер будут направляться вашему менеджеру репозитория. Например, добавьте следующее в раздел <mirrors> файла Maven settings.xml для перенаправления запросов в центральный менеджер вашего репозитория:

<mirror>
  <id>central-proxy</id>
  <mirrorOf>central</mirrorOf>
  <url>http://myrepo/nexus/content/groups/public</url>
</mirror>

Я обычно создаю группу репозитория , содержащий несколько удаленных репозиториев. Что касается моей установки Maven, группа действует как единый репозиторий, но сопоставляет артефакты из нескольких удаленных репозиториев.

person Rich Seller    schedule 25.09.2009
comment
Моя установка maven, похоже, захватывает центральные репозитории maven из моей установки Nexus, но я не вижу, чтобы на сервере ничего кэшировалось. Единственное, что я изменил по сравнению с установкой по умолчанию, - это указать прокси-серверу Maven Central для загрузки индекса MC. - person Buns of Aluminum; 03.10.2009
comment
Если вы настроили зеркало так, чтобы оно указывало на общедоступную группу, вы должны увидеть загруженные артефакты под репозиторием Maven Central. Вы этого не видите? - person Rich Seller; 03.10.2009

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

После установки и настройки диспетчера репозиториев вам необходимо настроить maven для проверки репозитория, а не общедоступных репозиториев. Для этого отредактируйте настройки зеркала (как указано Ричардом) в вашем ~/.m2/settings.xml. См. Раздел 3.2. Настройка Maven для использования одной группы Nexus из книги Nexus для получения дополнительных сведений (конфигурация применима к любому менеджеру репозитория).

В корпоративной среде я предпочитаю заставлять Maven использовать единый репозиторий, зеркалируя все запросы репозитория. Для этого установите mirrorOf в *.

<settings>
  ...
  <mirrors>
    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
    </mirror>
  </mirrors>
  ...
</settings>
person Pascal Thivent    schedule 25.09.2009

В Artifactory вы можете использовать страницу «Home-> Maven Settings», чтобы загрузить настройки maven, которые заставят maven использовать только выбранные вами виртуальные репозитории Artifactory. Это в сочетании с очисткой ссылок на репозиторий в виртуальных репозиториях гарантирует, что вы никогда не будете запрашивать maven central.

Ваша проблема с NetBeans может быть решена путем принудительного объявления репо в вашей установке Maven. В последний раз, когда я использовал поддержку NetBeans Maven, я также указал файл settings.xml на уровне проекта, чтобы охватить все случаи.

Боковое примечание: использование функции mirrorOf очень грубо и может привести к странному поведению.

person Fred Simon    schedule 03.03.2011