У меня слишком много файлов в папке .m2, где maven хранит загруженные зависимости. Есть ли способ очистить все старые зависимости? Например, если существует зависимость от 3 разных версий: 1, 2 и 3, после очистки должно быть только третье. Как я могу это сделать для всех зависимостей в папке .m2?
Как очистить старые зависимости от хранилищ maven?
Ответ 1
Если вы работаете в Unix, вы можете использовать время доступа к файлам. Просто включите время доступа для вашей файловой системы, затем запустите чистую сборку всех ваших проектов, для которых вы хотите сохранить зависимости, а затем выполните что-то вроде этого (UNTESTED!):
find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done
Здесь будут найдены все *.pom файлы, которые в последний раз были доступны более 5 минут назад (при условии, что вы начали создавать max 5 минут назад) и удалите их каталоги.
Добавьте "эхо" перед rm, чтобы выполнить "сухой ход".
Ответ 2
Короткий ответ -
Удаленная папка .m2 в {user.home}
. Например. в Windows 10 пользовательский дом C:\Users\user1
. Восстановите свой проект с помощью mvn clean package
. Останутся только те зависимости, которые требуются для проектов.
Длительный ответ - .m2 как обычная папка, а содержимое папки построено из разных проектов. Я думаю, что нет возможности автоматически определить, какая библиотека "старая". На самом деле старый - это неопределенное слово. Могло быть так много причин, когда предыдущая версия библиотеки используется в проекте, поэтому определение того, какой из них не используется, невозможно.
Все, что вы могли сделать, это удалить папку .m2 и перестроить все ваши проекты, а затем автоматически создаст папку со всей необходимой библиотекой.
Если вы беспокоитесь только о конкретной версии библиотеки, которая будет использоваться во всех проектах; важно, чтобы проект pom также обновлялся до последней версии. то есть, если разные POM ссылаются на разные версии библиотеки, все они будут загружены в .m2.
Ответ 3
Имея POM файл для проекта maven, вы можете удалить все его зависимости в локальном репозитории (по умолчанию ~/.m2/respository) с помощью плагина зависимостей Apache Maven.
Он включает в себя функцию dependency:purge-local-repository
которая удаляет зависимости проекта из локального репозитория и, при необходимости, повторно разрешает их.
Для очистки локальных зависимостей вам просто нужно использовать необязательный параметр reResolve и установить его в значение false, поскольку по умолчанию он имеет значение true.
Этот вызов командной строки должен работать:
mvn dependency:purge-local-repository -DreResolve=false
Ответ 4
-
Загрузить все фактические зависимости ваших проектов
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
-
Переместите локальный репозиторий maven во временное расположение
mv ~/.m2 ~/saved-m2
-
Переименуйте все файлы maven-metadata-central.xml * из сохраненного репозитория в maven-metadata.xml *
find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
-
Чтобы настроить измененную копию локального репозитория в качестве зеркала, создайте каталог ~/.m2 и файл ~/.m2/settings.xml со следующим содержимым (заменив пользователь > с вашим именем пользователя):
<settings> <mirrors> <mirror> <id>mycentral</id> <name>My Central</name> <url>file:/home/user/saved-m2/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
-
Снова разрешите зависимости проектов:
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
-
Теперь у вас есть локальный репозиторий maven с минимальными необходимыми артефактами. Удалите локальное зеркало из файла конфигурации и из файловой системы.
Ответ 5
Я хотел удалить старые зависимости из моего репозитория Maven. Я подумал о том, чтобы просто запустить ответ Флориана, но я хотел что-то, что я мог бы запускать снова и снова, не вспоминая длинный фрагмент linux, и мне нужно что-то с небольшой конфигурацией - больше программы, а не цепочки команд unix, поэтому я взял базовую идею и превратил ее в (относительно небольшую) Ruby-программу, которая удаляет старые зависимости на основе их последнего времени доступа.
Он не удаляет "старые версии", но поскольку на самом деле у вас может быть два разных активных проекта с двумя разными версиями зависимостей, это не сделало бы того, что я хотел в любом случае. Вместо этого, как и Флориан, он удаляет зависимости, которые не были доступны в последнее время.
Если вы хотите попробовать, вы можете:
- Посетите репозиторий GitHub
- Клонировать репозиторий или загрузить исходный код
- Необязательно проверить код, чтобы убедиться, что он не злонамерен
- Выполнить
bin/mvnclean
Есть варианты переопределения репозитория Maven по умолчанию, игнорирования файлов, установки пороговой даты, но вы можете прочитать их в README на GitHub.
Я, возможно, упакую его как камень Ruby в какой-то момент после того, как я немного поработаю над этим, что упростит ситуацию (gem install mvnclean; mvnclean
), если у вас уже установлен и работает Ruby.
Ответ 6
Просто очистите каждый контент в папке репозитория .m2 → . Когда вы создаете проект, все зависимости загружаются здесь.
В вашем случае может быть ваш проект ранее использовал старую версию любой зависимости, а теперь обновлена версия. Так что лучше очистите папку .m2 и создайте свой проект с помощью mvn clean install.
Теперь зависимости в последних версиях модулей будут загружены в эту папку.
Ответ 7
Я придумал утилиту и разместил на GitHub для очистки старых версий библиотек в локальном репозитории Maven. Утилита при выполнении по умолчанию удаляет все более старые версии артефактов, оставляя только самые последние. При желании он может удалить все моментальные снимки, источники, javadocs, а также группы или артефакты могут быть принудительно/исключены в этом процессе. Эта кроссплатформенная также поддерживает удаление на основе даты на основе последних дат доступа/загрузки.
Ответ 8
Вам нужно скопировать зависимость, необходимую для проекта. Имея их в руках, удалите все теги <dependency>
встроенные в тег <dependencies>
из файла POM.XML в вашем проекте.
После сохранения файла вы не увидите Maven Dependencies в ваших Libraries
. Затем вставьте те <dependency>
вы скопировали ранее.
Maven автоматически загрузит требуемые файлы jar, это можно увидеть и в сгенерированных Libraries
зависимостей Maven после сохранения файла.
Благодарю.
Ответ 9
Запустить проверку. Затем удалите каталог, который больше не находится на пути сборки проекта, как видно из представления журнала ошибок.
Например: Проблема: ... m2\repository\com\quickxml\jackson\core\jackson-core\2.5.0\jackson-core-2.5.0.jar не находится на пути его создания проекта
Решение: Перейдите в репозиторий .m2 и удалите папку quickxml.