Зеркала репозитория maven

Как правило, у меня есть следующее зеркало, настроенное в моем Maven settings.xml

<mirror>
  <id>internal-repository</id>
  <url>http://build.idaho.local/wtp_repository</url>
  <mirrorOf>*</mirrorOf>
</mirror>

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

Однако всякий раз, когда я хочу добавить зависимость, которой нет в этом внутреннем репозитории, я должен прокомментировать текст выше и добавить в проект pom.xml

следующее:
<repository>
  <id>internal-repository</id>
  <url>http://build.idaho.local/wtp_repository</url>
</repository>

Когда я делаю эти изменения, Maven будет проверять зависимости в локальном репо, а если их не найти, загрузите их из Интернета в местное репо. Как только у меня появятся зависимости, мне нужно изменить конфигурацию.

Есть ли способ получить поведение, которое я хочу - всегда проверяйте внутреннее репо, а затем публичные (интернет) репозитории - без необходимости добавлять <repository> к каждому проекту pom.xml?

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

Ответы

Ответ 1

Вы можете попытаться настроить maven для использования зеркала только для центрального репозитория или для исключения репозитория, идентифицированного некоторым идентификатором.

<mirror>
    <id>internal-mirror</id>
    <url>http://build.idaho.local/wtp_repository</url>
   <mirrorOf>central</mirrorOf>
</mirror>

или

<mirror>
    <id>internal-mirror</id>
    <url>http://build.idaho.local/wtp_repository</url>
   <mirrorOf>*,!internal-repository</mirrorOf>
</mirror>

Примеры были адаптированы из настроек maven и для настройки зеркал.

Ответ 2

Этот вопрос довольно старый, но в любом случае:

Поместите a <profile> в свой файл settings.xml, который указывает ваш внутренний репозиторий с помощью элемента <repository>

...
    <profile>
        <id>devel-repos</id>

        <repositories>
            <repository>
                <id>repo-release</id>
                <url>http://repohost:repoport/path/to/release/repo</url>
            </repository>
            <repository>
                <id>repo-snapshot</id>
                <url>http://repohost:repoport/path/to/snapshot/repo</url>
            </repository>
        </repositories>
    </profile>
...

Затем установите указанный выше профиль как <activeProfile>. Это активирует профиль для каждого вызова maven.

...
<activeProfiles>
    <activeProfile>devel-repos</activeProfile>
</activeProfiles>
...

Это не позволяет избежать нескольких определений репозитория, но это дает вам самое главное: все централизовано в settings.xml, а ваш pom.xml чист (и переносится).

Ответ 3

Похоже, что вы не можете правильно настроить или использовать зеркало.

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

Ответ 4

Добавьте раздел репозитория в супер пом. И пусть все проекты простираются от супер-пом.

Таким образом, у каждого другого проекта pom будет родительский раздел, который будет расширяться от суперпома, подобного этому.

<parent>
    <groupId>com.ddd.ddd.ddd</groupId>
    <artifactId>ddd-ddd-parent</artifactId>
    <version>1.1.1-SNAPSHOT</version>
    <relativePath>./config/superpom/pom.xml</relativePath>
</parent>

Таким образом, вы можете иметь раздел репозитория только в одном файле pom, это ваш супер-пом. Вы также можете добавить любые зависимости, которые являются общими для всех проектов здесь, таких как junit, log4j и т.д.

В файле settings.xml. Вы можете добавить это, чтобы настроить локальный репозиторий.

<localRepository>C:/myBox/maven.repo</localRepository>

Ответ 5

Удаление настроек зеркала с settings.xml и установка следующего кода для меня.

<profiles>
    <profile>
        <id>profile-1</id>
        <repositories>
            <repository>
                <id>internal-repository-1</id>
                <url>http://build.idaho.local/wtp_repository</url>
            </repository>
        </repositories>
    </profile>
</profiles>
<activeProfiles>
    <activeProfile>profile-1</activeProfile>
</activeProfiles>