Как очистить кэш Apache Maven?

115

В последнее время Apache Maven, похоже, имеет проблемы с кешированием. Выполнение чистой установки в наших проектах с использованием Windows Vista или Windows 7 иногда приводит к артефактам с теми же данными, что и предыдущая сборка, даже если новые файлы артефактов должны быть обновлены.

Есть ли способ очистить этот кеш, чтобы заставить maven всегда запускать чистую сборку локального артефакта, который должен быть построен?

В частности, у нас возникают проблемы с созданием webapp с помощью военного плагина. Версия Maven 3.0.3. Версия плагина войны - 2.1.1.

  • 2
    Вы пробовали флаг -U который обновит артефакты?
  • 2
    Вы можете дать более подробную информацию? Разве иждивенцы не обновляются на войне? Если да, то есть ли у зависимых версий SNAPSHOT?
Показать ещё 3 комментария
Теги:
maven

5 ответов

114

Удалите артефакты (или полное локальное репо) из c:\Users\username\.m2\repository вручную.

  • 4
    Уже пробовал, не сработало. Спасибо за предложение, хотя.
  • 160
    Как это может не работать?
Показать ещё 5 комментариев
99

Чтобы очистить локальный кеш, попробуйте использовать подключаемый модуль зависимостей.

  • mvn dependency:purge-local-repository: Это попытка удалить файлы локального репозитория, но она всегда идет и заполняет локальный репозиторий после того, как все было удалено.
  • mvn dependency:purge-local-repository -DreResolve=false: Это позволяет избежать повторного разрешения зависимостей, но, по-видимому, по-прежнему идет в сеть время от времени.
  • mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false: Это был добавлен Paweł Prażak и, похоже, хорошо работает. Я бы использовал третий, если вы хотите, чтобы локальное репо было опустошено, и первое, если вы просто хотите выбросить локальное репо и снова получить зависимости.
  • 4
    какая разница между ними?
  • 11
    Первый - это попытка удалить файлы локального репозитория, но он всегда идет и заполняет локальный репозиторий после того, как что-то было удалено. Второй избегает повторного разрешения зависимостей, но, похоже, время от времени отправляется в сеть. Третий был добавлен Павлом Prażak и, кажется, работает хорошо. Я бы использовал третий, если вы хотите очистить локальное репо, и первый, если вы просто хотите выбросить локальное репо и снова получить зависимости.
Показать ещё 3 комментария
9

Вы проверили/изменили параметры updatePolicy для ваших репозиториев в settings.xml.

Этот элемент указывает, как часто должны возникать обновления. Maven будет сравнивать местную временную метку POM (хранящуюся в хранилище файл maven-metadata) на удаленный компьютер. Выбор: всегда, ежедневно (по умолчанию), интервал: X (где X - целое число в минутах) или никогда.

Попробуйте установить его на always.

  • 1
    Возможная помощь для решения этой проблемы ... У меня нет <updatePolicy> в моем pom.xml, но есть <snapshotPolicy>
  • 0
    updatePolicy всегда установлен везде в моем файле settings.xml.
5

Это работает с Spring Tool Suite v 3.1.0.RELEASE, но я предполагаю, что он также доступен и на Eclipse.

После удаления артефактов вручную (как указано в пункте palacsint выше) в каталоге /username/.m2, повторно проиндексируйте файлы, выполнив следующие действия:

Перейдите в меню Windows- > Preferences- > Maven- > User Settings.

Нажмите кнопку "Reindex" рядом с текстовым полем "Локальный репозиторий". Нажмите "Применить", затем "ОК", и все готово.

0

Я бы сделал следующее:

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

Флаги сообщают maven, что не пытались разрешить зависимости или попали в сеть. Удалите то, что вы видите локально.

И для хорошей меры игнорируйте ошибки (--fail-at-end) до самого конца. Это иногда полезно для проектов, которые несколько перепутали набор зависимостей или полагаются на несколько испорченный внутренний репозиторий (это происходит.)

  • 0
    Извините, я не понимаю вопроса: /

Ещё вопросы

Сообщество Overcoder
Наверх
Меню