Где лучше всего указать репозитории maven, pom.xml или settings.xml? - PullRequest
55 голосов
/ 09 февраля 2010

Где лучше всего указать необходимые репозитории для maven проектов, pom.xml или settings.xml? Каковы плюсы и минусы каждого места? Что такое лучшая практика?

Мне кажется, что определение репозиториев в POM лучше по ряду причин:

  • Воспроизводимость: зависимые артефакты поступают из известного местоположения, которое явно объявлено в POM. У неправильно настроенных репозиториев пользователя также меньше возможностей для возникновения проблем.
  • Переносимость: это POM будет собираться на любом компьютере с установленным maven. Для дополнительных пользовательских настроек репозитория нет никаких дополнительных требований.
  • Простота использования: новым разработчикам легче извлекать и создавать проект, потому что меньше настроек для настройки.

Возможно, дело в том, что если в будущем расположение хранилища изменится, необходимо установить прокси-серверы или выпустить исправления выпусков старого программного обеспечения, указав новые расположения хранилища (или .m2/settings.xml всегда может предоставить дополнительные хранилища в в крайнем случае). Тем не менее, это похоже на необходимый результат хорошей воспроизводимости и переносимости в управлении выпусками, а не на недостаток.

Есть еще мысли?

Ответы [ 3 ]

52 голосов
/ 09 февраля 2010

Где лучше всего указать необходимые репозитории для проектов maven, pom.xml или settings.xml? Каковы плюсы и минусы каждого места? Что такое лучшая практика?

Я бы лично определил репозитории, требуемые конкретным проектом в проекте pom.xml, потому что он сохраняет сборку переносимой. Файл settings.xml должен использоваться только для личных или секретных вещей, на мой взгляд. Нет, на самом деле, просьба к пользователю добавить места в хранилище, даже если это правильно задокументировано, каким-то образом нарушает одну из функций maven (прозрачная обработка зависимостей), и мне не нравится эта идея.

Единственный "хороший" вариант использования, который я могу придумать для использования settings.xml для работы с репозиториями, это когда у вас есть корпоративный репозиторий и вы хотите, чтобы Maven использовал этот репозиторий вместо общедоступных. Например, чтобы избежать подключений к любому общедоступному репозиторию, вы должны объявить корпоративный репозиторий как зеркало всех из них:

<settings>
  ...
  <mirrors>
    <mirror>
      <id>proxy-of-entire-earth</id>
      <mirrorOf>*</mirrorOf>
      <name>Maven Repository Manager running on repo.mycompany.com</name>
      <url>http://repo.mycompany.com/proxy</url>
    </mirror>
  </mirrors>
  ...
</settings>
3 голосов
/ 05 ноября 2010

Я всегда помещаю URL-адреса в POM и пароли в settings.xml. Если вы помещаете URL-адреса в файл settings.xml, вам необходимо, чтобы пользователи обновляли файлы в своих локальных системах, если ваш URL-адрес когда-либо изменится. Если URL указан в вашем POM, вы можете изменить его и отправить новый выпуск. URL-адреса меняются чаще, чем может предсказать большинство пользователей, и приводят к разочарованию пользователей при сбое сборки.

Пароли хранятся в файле settings.xml по понятным причинам. Пароли никогда не должны храниться в системе контроля версий. Вам понадобятся пароли для функциональности mvn deploy для развертывания в удаленных репозиториях.

1 голос
/ 26 марта 2019

Я приведу три причины, по которым вам следует рассмотреть возможность хранения URL-адресов хранилища в settings.xml вместо pom.xml:

  1. spekdrum упомянул что-то, что действительно произошло с нами:

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

  1. Ребята из Sonatype рекомендуют размещать URL-адреса в settings.xml.

  2. Если хранилище зависимостей выходит из строя (подумайте java.net), вам нужно исправить URL только в одном месте. Если вы использовали pom.xml, все предыдущие выпуски не работают. Возможно, вам придется зафиксировать фиксированную pom.xml для каждой версии выпуска.

Является ли настройка URL-адресов в settings.xml более эффективной, чем pom.xml? Абсолютно.

Купит ли это больше гибкости? Абсолютно.

Вот как settings.xml должен выглядеть:

<settings>
    <profiles>
        <profile>
            <id>mycompany-servers</id>
            <repositories>
                <repository>
                    <id>mycompany-release</id>
                    <url>https://mycompany.com/release/</url>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
                <repository>
                    <id>mycompany-snapshot</id>
                    <url>https://mycompany.com/snapshot/</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>mycompany-servers</activeProfile>
    </activeProfiles>
    <servers>
        <server>
            <id>mycompany-release</id>
            <username>your-username</username>
            <password>your-api-key</password>
        </server>
        <server>
             <id>mycompany-snapshot</id>
             <username>your-username</username>
             <password>your-api-key</password>
        </server>
    </servers>
</settings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...