Прокси файла конфигурации Maven, сервер, репозиторий, примечания к зеркальному узлу

maven

причина

Написание этой статьи возникло из-за проблемы с коллегой, вероятно, после входа в нашу компанию файл settings.xml maven будет отправлен единообразно, и его можно будет использовать в обычном режиме, напрямую перезаписав тот, который идет с maven. Потом он хотел узнать, зачем нужно было настраивать и репозиторий, и сервер, и зеркало? Что означают эти свойства конфигурации? Какова связь между этими двумя? Каков порядок поиска банок после настройки нескольких репозиториев? Как его найти в сочетании с зеркалом?

Хотя я делал систематические заметки о Maven раньше (Краткое изложение боя Maven), но когда я действительно спросила меня об этом, то обнаружила, что его не хватает, и теперь я его восполню.

прокси, сервер, репозиторий, понимание зеркала

  • proxyЭто прокси-сервис, который необходимо настроить, когда сервер, на котором находится maven, не может напрямую получить доступ к внешней сети (обычно не используется).
  • serverКогда maven необходимо упаковать код и загрузить его на частный сервер, установите информацию для аутентификации частного сервера, учетную запись + пароль
  • repositoryЭто репозиторий, куда maven загружает пакет jar.
  • mirrorиспользуется для заменыrepositoryзеркальный адрес

Прокси и сервер хорошо изучены, поэтому основное внимание уделяется репозиторию и зеркалу. Итак, как отличить одно от другого?

Здесь мы используем частные серверы (внутренние хранилища) и зеркала (зеркала), чтобы объяснить:

  • внутренний репозиторий (частный сервер)Относится к репозиторию, построенному внутри локальной сети, и отличается от центрального репозитория, репозитория jboss и т. д. только тем, что его URL-адрес является внутренним URL-адресом.
  • зеркалоэквивалентно агенту,Будет перехватывать запросы на загрузку компонентов из указанного удаленного репозитория, а затем найти компонент у себя и отправить обратно клиенту.Цель настройки зеркала обычно связана с соображениями скорости сети..

Видно, что приватные сервера и зеркала — это разные вещи. Первый сам по себе является репозиторием, который можно использовать для предоставления компонентов maven внутри компании, в то время как последний сам по себе не является репозиторием.Это просто сетевой ускоритель для удаленного репозитория..

Однако многие инструменты для создания внутренних репозиториев часто также предоставляют зеркальные услуги.Например, Nexus может сделать один и тот же URL как внутренним репозиторием, так и сделать его зеркалом всех репозиториев..

Если репозиторий X может предоставить все, что хранится в репозитории Y, то X можно считать зеркалом Y. Другими словами, любой компонент, который можно получить из репозитория Y, можно получить и из его зеркала. Например,http://maven.net.cn/content/groups/public/это центральный складhttp://repo1.maven.org/maven2/Зеркала в Китае из-за географического положения часто могут обеспечить более высокую скорость, чем центральные склады.

зеркальная конфигурация

Зеркальный узел может соответствовать одному или нескольким узлам репозитория, управляемым значением, заполненным в mirrorOf.

<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
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>planetmirror.com</id>
      <name>PlanetMirror Australia</name>
      <url>http://downloads.planetmirror.com/pub/maven2</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>
  • атрибут id, идентификатор зеркала (других ссылок на это значение я не нашел)
  • атрибут имени, имя, описание
  • атрибут url, зеркальный адрес
  • mirrorOf, идентификатор репозитория, соответствующего зеркалу (вОпределено в Profiles-Repositories-repository-id). Например, чтобы указать на центральный репозиторий Maven (зеркало repo.maven.apache.org/maven2/)…центральный. Также можно использовать более сложные сопоставления, такие как repo1, repo2 или *,!inhouse. Это значение должно отличаться от идентификатора изображения.

Ниже приведен пример конфигурации использования зеркала NetEase вместо центрального хранилища:

<mirrors>
     <mirror>
      <id>maven.163.com</id>
      <name>maven mirror in China</name>
      <url>http://mirrors.163.com/maven/repository/maven-public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

В реальной эксплуатации будут следующие нестандартные конфигурации:

<mirrors>
     <mirror>
      <id>maven.163.com</id>
      <name>maven mirror in China1</name>
      <url>http://mirrors.163.com/maven/repository/maven-public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>
<mirrors>
    <mirror>
      <id>aliyun.com</id>
      <name>maven mirror in China2</name>
      <mirrorOf>central</mirrorOf>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>

Укажите два разных зеркала на центральный репозиторий одновременно, таким образом, maven будет толькоВыберите первое подходящее зеркало, то есть maven.163.com, второй никогда не вступит в силу. Официальный сайт объясняет следующее:

Note that there can be at most one mirror for a given repository. In other words, you cannot map a single repository to a group of mirrors that all define the same value. Maven will not aggregate the mirrors but simply picks the first match. If you want to provide a combined view of several repositories, use a repository manager instead.

При настройке зеркала центрального репозитория вам не нужно настраивать информацию об узле репозитория (поскольку maven уже настроен по умолчанию). Если вам нужно узнать более подробное содержание, ознакомьтесь с введением в конфигурацию зеркала официального веб-сайта:guide-mirror-settings

конфигурация репозитория

Узел репозитория должен существовать как дочерний элемент репозиториев, который, в свою очередь, должен существовать как дочерний элемент профилей.

<profiles>
    <profile>
        <id>nexus</id>
        <repositories>
            <!-- 公司私服配置 -->
            <repository>
                <id>you-internal-repos</id>
                <url>you-internal-repos-address</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                    <checksumPolicy>warn</checksumPolicy>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                    <checksumPolicy>warn</checksumPolicy>
                </snapshots>
            </repository>
            <!-- 阿里云私服配置 -->
            <repository>
                <id>aliyun-repos</id>
                <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <snapshots>
                    <enabled>true</enabled>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

<!-- 默认生效 -->
<activeProfiles>
    <activeProfile>nexus</activeProfile>
</activeProfiles>

Порядок поиска зеркала и репозитория

  • Когда зеркало существует в репозитории, Maven всегда будет использовать адрес конфигурации зеркала при поиске jar-файлов.
  • Если зеркала для репозитория не существуют, следуйте порядку, указанному в узле репозиториев. Сначала определите, сначала найдите.

Первый пункт не нуждается в проверке, это механизм Maven. Второй момент - это результат вашей собственной проверки, больше не повторяя процесс проверки, возможно просто удалите уже существующую локально банку и снова запакуйте ее, используйте командуmvn package -XУпакуйте и выведите подробный журнал отладки, найдите ключевое слово имени пакета jar, посмотрите, какое удаленное хранилище проверить в первый раз, измените порядок определения удаленного хранилища и повторите попытку, чтобы получить результат.

Экземпляр конфигурации

Ниже приведен пример файла конфигурации, который заменяет центральный репозиторий образом Alibaba Cloud:

<?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">
  <localRepository>你的本地仓库地址</localRepository>
  <pluginGroups></pluginGroups>
  <proxies></proxies>
  <servers></servers>
  <mirrors>
    <mirror>
      <id>nexus-aliyun</id>
      <name>Nexus aliyun</name>
      <mirrorOf>central</mirrorOf>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>nexus-mine</id>
      <name>Nexus mine</name>
      <mirrorOf>*</mirrorOf>
      <url>http://xx.xx.xx.xx/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
</settings>

Ссылаться на