Зеркала репозитория 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>