Как я могу заставить Maven прекратить попытки проверять наличие обновлений для артефактов определенной группы из maven-central-repo? - PullRequest
115 голосов
/ 28 августа 2009

Я работаю над довольно большим проектом Maven. У нас, вероятно, около 70 или около того отдельных артефактов, которые примерно разбиты на две библиотеки общего кода и, возможно, десять приложений, которые их используют. Все эти предметы живут в пространстве имен com.mycompany.*.

Большую часть времени мы работаем со сборками моментальных снимков. Поэтому, чтобы выполнить полную сборку приложения, я мог бы сначала собрать проекты библиотек так, чтобы они были установлены в моем локальном хранилище (как, скажем, mycompany-libname-2.4-SNAPSHOT.jar).

Проблема в том, что когда я иду, я создаю приложения. По какой-то причине Maven хочет проверить основные два общедоступных репозитория (maven-net-repo и java-net-repo) на наличие обновлений для всех артефактов mycompany-*-SNAPSHOT.jar. Конечно, их там нет, и в конечном итоге все возвращается к версиям, которые я только что собрал для своего локального репозитория, но я бы хотел, чтобы Maven прекратил это делать, потому что (а) я чувствую себя плохим net.citizen за постоянную проверку этих репозиториев на наличие вещей, которых никогда не будет, и (b) это добавляет некоторую ненужную и раздражающую задержку сети в мой процесс сборки.

Я привык запускать maven в автономном режиме большую часть времени, чтобы обойти это, но это не идеально, так как иногда зависимость от публичной библиотеки будет обновляться. Поэтому я ищу решение, которое заставит Maven не проверять наличие обновлений в указанных репозиториях на наличие артефактов, соответствующих определенным критериям. В этом случае я был бы рад, если бы Maven игнорировал либо версии SNAPSHOT, либо артефакты, которые были в com.mycompany пространство имен.

Ответы [ 6 ]

155 голосов
/ 23 июня 2011

Кроме того, вы можете использовать -o или --offline в командной строке mvn, что переведет maven в «автономный режим», чтобы он не проверял обновления. Вы получите предупреждение о том, что не можете получить зависимости, которых еще нет в вашем локальном репо, но ничего страшного.

84 голосов
/ 07 декабря 2011

То, что теперь доступно и в Maven, это

mvn goal --no-snapshot-updates

или короче

mvn goal -nsu
31 голосов
/ 28 августа 2009

Обновление: я должен был начать с этого, так как ваши проекты - SNAPSHOT. Это часть семантики SNAPSHOT, которую Maven будет проверять на наличие обновлений для каждой сборки. Быть SNAPSHOT означает, что оно изменчиво и подвержено изменениям, поэтому следует проверять наличие обновлений. Однако стоит отметить, что Maven super POM настраивает централь на отключение моментальных снимков, поэтому Maven никогда не должен проверять наличие обновлений для SNAPSHOT на центральном, если вы не изменили это в своих собственных pom / settings.


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

В вашем файле settings.xml вы бы добавили что-то вроде этого, чтобы установить ваш внутренний репозиторий как зеркало для центрального:

<mirrors>
  <mirror>
    <id>ibiblio.org</id>
    <name>ibiblio Mirror of http://repo1.maven.org/maven2/</name>
    <url>http://path/to/my/repository</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
</mirrors>

Если вы используете менеджер репозитория, например Nexus , для своего внутреннего репозитория. Вы можете настроить прокси-репозиторий для прокси-централи, поэтому любые запросы, которые обычно отправляются в Central, вместо этого отправляются в ваш прокси-репозиторий (или группа репозитариев , содержащая прокси-сервер), и последующие запросы кэшируются во внутреннем менеджере хранилища. Вы даже можете установить таймаут прокси-кэша на -1, поэтому он никогда не будет запрашивать содержимое из централизованного сервера, которое уже находится в репозитории прокси.


Более базовое решение, если вы работаете только с локальными репозиториями, - это установить updatePolicy для центрального репозитория на «никогда», это означает, что Maven будет когда-либо проверять только те артефакты, которых еще нет в локальный репозиторий. Затем его можно переопределить в командной строке, если необходимо, с помощью ключа -U, чтобы заставить Maven проверять наличие обновлений.

Вы должны настроить хранилище (в вашем pom или профиле в файле settings.xml) следующим образом:

<repository>
  <id>central</id>
  <url>http://repo1.maven.org/maven2</url>
  <updatePolicy>never</updatePolicy>
</repository>
29 голосов
/ 17 октября 2012

Тег updatePolicy у меня не работал. Однако Rich Seller упомянул, что снимки должны быть отключены в любом случае, поэтому я посмотрел дальше и заметил, что дополнительный репозиторий, который я добавил в мой файл settings.xml, действительно вызывал проблему. Добавление раздела снимков в этот репозиторий в моем файле settings.xml помогло!

<repository>
    <id>jboss</id>
    <name>JBoss Repository</name>
    <url>http://repository.jboss.com/maven2</url>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>
4 голосов
/ 06 января 2013

Очень просто:

В родительском Super POM или файле setting.xml введите

        <repository>
        <id>central</id>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <updatePolicy>never</updatePolicy>
        </snapshots>
        <url>http://repo1.maven.org/maven2</url>
        <layout>legacy</layout>
    </repository>

Это мои советы

0 голосов
/ 21 июля 2011

У меня были некоторые проблемы, похожие на это,

<repository>
    <id>java.net</id>
    <url>https://maven-repository.dev.java.net/nonav/repository</url>
    <layout>legacy</layout>
</repository>
<repository>
    <id>java.net2</id>
    <url>https://maven2-repository.dev.java.net/nonav/repository</url>
</repository>

Установка updatePolicy на "никогда" не сработала. Удаление этого репо было способом, которым я решил это. PS: я следовал этому учебнику о веб-сервисах (кстати, наверное, лучший учебник для WS для Java)

...