В последнее время у Apache Maven возникают проблемы с кэшированием. Выполнение чистой установки в наших проектах с использованием Windows Vista или Windows 7 иногда приводит к появлению артефактов с теми же данными, что и в предыдущей сборке, даже если файлы нового артефакта должны были быть обновлены.
Есть ли способ очистить этот кеш, чтобы maven всегда вызывал чистую сборку локального артефакта, который должен быть построен?
В частности, у нас возникают проблемы при создании веб-приложения с помощью плагина war. Maven версия 3.0.3. Версия плагина War 2.1.1.
-U
флаг, который обновит артефакты?mvn clean install
положить новые артефакты в локальный репозиторий?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Ответы:
Удалите артефакты (или полное локальное репо)
c:\Users\<username>\.m2\repository
вручную.источник
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
наконец-то сработалоЧтобы очистить локальный кеш, попробуйте использовать плагин зависимостей.
mvn dependency:purge-local-repository
: Это попытка удалить файлы локального репозитория, но она всегда идет и заполняет локальный репозиторий после того, как что-то было удалено.mvn dependency:purge-local-repository -DreResolve=false
Это позволяет избежать повторного разрешения зависимостей, но, похоже, время от времени отправляется в сеть.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Это было добавлено Павлом Prażak и, кажется, работает хорошо. Я бы использовал третий, если вы хотите очистить локальное репо, и первый, если вы просто хотите выбросить локальное репо и снова получить зависимости.источник
<User_Name>/.m2
местоположение. Не уверен, что это будет причиной.Вы проверили / изменили настройки updatePolicy для своих репозиториев в своем
settings.xml
.Попробуйте установить его на
always
.источник
<updatePolicy>
в моем pom.xml, но есть<snapshotPolicy>
Я бы сделал следующее:
Флаги говорят maven не пытаться разрешать зависимости или попадать в сеть. Удалить то, что вы видите локально.
И для хорошей меры игнорируйте ошибки (
--fail-at-end
) до самого конца. Это иногда полезно для проектов, которые имеют несколько испорченный набор зависимостей или полагаются на несколько испорченный внутренний репозиторий (это бывает.)источник
Это работает в Spring Tool Suite v 3.1.0.RELEASE, но я предполагаю, что оно также доступно и в Eclipse.
После удаления артефактов вручную (как указано выше в palacsint) в
/username/.m2
каталоге выполните повторную индексацию файлов, выполнив следующие действия:Перейти к:
Windows->Preferences->Maven->User Settings
меню.Нажмите
Reindex
кнопку рядом сLocal Repository
текстовым полем. Нажмите «Применить», затем «ОК», и все готово.источник
Как уже указывалось в некоторых ответах, иногда вы действительно хотите удалить локальный репозиторий, например, могут быть некоторые артефакты, которые невозможно очистить, поскольку на них больше не ссылается pom.
Если вы хотите встроить это удаление в фазу maven, например,
clean
вы можете использоватьmaven-clean-plugin
и получить доступ к хранилищу через настройки, например:источник
Используйте,
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
если у вас есть плагины Maven в качестве одного из модулей. В противном случае Maven попытается перекомпилировать их, тем самым снова загрузив зависимости.источник
У меня была такая же проблема, и я написал для этого однострочную оболочку.
Я сделал это как однострочник, потому что хотел, чтобы проект Jenkins просто запускал это всякий раз, когда мне было нужно, чтобы мне не приходилось входить в систему и т. Д. Если вы позволите себе сценарий оболочки для этого, Вы можете написать это чище:
Должно работать, но я не проверял весь этот сценарий. (Я протестировал первую команду, но не весь сценарий.) У этого подхода есть недостаток: сначала нужно запускать сложную сложную команду. Это идемпотент, так что вы можете проверить это сами. После этого удаление - это отдельная команда, и это позволяет вам все попробовать и проверить, выполняет ли она то, что, по вашему мнению, делает, потому что вы не должны доверять командам удаления без проверки. Тем не менее, он умный по одной уважительной причине: он портативный. Он уважает ваш файл settings.xml. Если вы запускаете эту команду и говорите maven использовать определенный XML-файл (аргумент -s или --settings), это все равно будет работать. Так что вам не нужно возиться с тем, чтобы убедиться, что все везде одинаково.
Это немного громоздко, но это достойный способ ведения бизнеса, ИМО.
источник
Итак, есть несколько команд, которые вы можете использовать для очистки
Также может помочь удаление папки репозитория из .m2.
источник