У меня слишком много файлов в папке .m2, где maven хранит загруженные зависимости. Есть ли способ очистить все старые зависимости? Например, если существует зависимость от 3 разных версий: 1, 2 и 3, после очистки должно быть только третье. Как я могу это сделать для всех зависимостей в папке .m2?Как очистить старые зависимости от репозиториев maven?
ответ
Короткий ответ - DELETED .m2 папку в {user.home}
. Например. в Windows 10 пользовательский номер C:\Users\user1
. Восстановите свой проект, используя mvn clean package
. Останутся только те зависимости, которые требуются проектами.
Длительный ответ - .m2 папка похожа на обычную папку, а содержимое папки построено из разных проектов. Я думаю, что нет возможности автоматически определить, какая библиотека «старая». На самом деле старый - это неопределенное слово. Могло быть так много причин, когда предыдущая версия библиотеки используется в проекте, поэтому определение того, какой из них не используется, невозможно.
Все, что вы могли сделать, это удалить папку .m2 и перестроить все ваши проекты, а затем автоматически создаст папку со всей необходимой библиотекой.
Если вы беспокоитесь только о конкретной версии библиотеки, которая будет использоваться во всех проектах; важно, чтобы pom проекта также обновлялся до последней версии. то есть, если разные POM ссылаются на разные версии библиотеки, все они будут загружены в .m2.
«поэтому определение того, какой из них не используется, невозможно». Мне не нужно это определение Мне нужно оставить только новые версии. – Cherry
Затем удалите папку .m2, а затем убедитесь, что все проекты имеют только новые версии записи jar в pom .xml. Перестройте проект. Папка .m2 останется с только последней версией. – gyan
'delete .m2' приводит к удалению всех зависимостей и загрузке новых из репозитория, который является экстремально медленным. – Cherry
Учитывая файл POM для проекта maven, вы можете удалить все его зависимости в локальном репозитории (по умолчанию ~/.m2/respository), используя Apache Maven Dependency Plugin. Он включает функцию зависимости: очистка-локальный репозиторий, которая удаляет зависимости проекта из локального репозитория и, возможно, повторно разрешает их.
Чтобы очистить локальные зависимости, вам просто нужно использовать необязательный параметр reResolve и установить его в значение false, поскольку по умолчанию оно установлено в значение true.
Эта команда вызова должна работать: МВН зависимость: продувка локального репозитария -DreResolve = ложь
Хорошо :) Но эта очистка зависит только от текущего проекта, а не от всего репозитория. – Cherry
Это правда! Чтобы очистить весь репозиторий, я пошел вручную и удалял каталоги из ./m2/repository, как было прокомментировано до или в новых версиях Nexus (после 2.6.4-02.) Они предоставляют задачу Scheduled [link] (http: // blog.sonatype.com/2009/09/nexus-scheduled-tasks/#.VGUD52NGWdA) Удалите выпуски из возможностей репозитория из коробки. Также может быть полезно –
Если вы на Unix, вы можете использовать время доступа к файлам там. Просто включите время доступа для вашей файловой системы, а затем выполнить чистую сборку всех ваших проектов, которые вы хотели бы сохранить зависимости для а затем сделать что-то вроде этого (непроверенное!):
find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done
Найдет все * .pom файлы которые в последний раз были доступны более 5 минут назад (при условии, что вы начали свои сборки максимум 5 минут назад) и удалите их каталоги.
Добавить «эхо» перед rm, чтобы сделать «сухой пробег».
В OSX (может также работать и с инструментами GNU) 'find ~/.m2/repository/-atime +30 -iname '* .pom' -print0 | при чтении -d '' -r pom; do echo rm -rf "$ (dirname $ pom)"; done' где 'atime' находится в днях (по сравнению с' amin' в минутах) – Brice
Я использую 'find ~/.m2 -atime + 1w -iname '* .pom' | при чтении pom; do parent = $ (dirname "$ pom"); rm -rf "$ parent"; done ", который работает для меня на OSX. Должен работать отлично и в других unixes :) – Meeh
Я хотел удалить старые зависимости из моего репозитория Maven. Я подумал о том, чтобы просто запустить ответ Флориана, но мне нужно было что-то, что я мог бы запускать снова и снова, не вспоминая длинный фрагмент linux, и мне хотелось что-то с некоторой конфигурацией - больше программы, а не цепочки команд unix , поэтому я взял базовую идею и превратил ее в (относительно небольшую) программу Ruby, которая удаляет старые зависимости на основе их последнего времени доступа.
Он не удаляет «старые версии», но поскольку у вас могут быть два разных активных проекта с двумя разными версиями зависимостей, это не сделало бы того, что я хотел в любом случае.Вместо этого, как и ответ Флориана, он удаляет зависимости, которые не были доступны в последнее время.
Если вы хотите попробовать, вы можете:
- Посетите GitHub repository
- Clone хранилище, или загрузить исходный
- Необязательно инспектировать код, чтобы убедиться, что он не злой
- Пробег
bin/mvnclean
Есть варианты переопределения по умолчанию Maven reposit ory, игнорировать файлы, установить пороговую дату, но вы можете прочитать их в README на GitHub.
Я, возможно, упакую его как камень Ruby в какой-то момент после того, как я немного поработаю над этим, что упростит вопросы (gem install mvnclean; mvnclean
), если у вас уже установлен и работает Ruby.
fwiw, это сработало для меня на моей установке cygwin. – catholicon
Рад это услышать. Полагаю, я должен пойти на проблему превращения его в драгоценный камень. –
кажется, я говорил слишком рано. Я не знаю шаблона, но некоторые из банок были удалены, хотя я знаю, что использовал их недавно. Но в то же время некоторые остались. – catholicon
Просто очистите все содержимое под .m2 -> папкой репозитория. Когда вы создаете проект, здесь загружаются все зависимости.
В вашем случае может быть ваш проект ранее использовал старую версию любой зависимости, и теперь версия обновлена. Так что лучше очистите папку .m2 и создайте свой проект с помощью mvn clean install.
В эту папку будут загружены зависимости с последними версиями модулей.
Если у вас нет устаревших банок, добавленных вручную в репозиторий, или зависимости больше не доступны в Интернете. Этот ответ немного опасен ... по крайней мере, поддержите сначала! –
Завершить проверку. Затем удалите каталог, который больше не находится на пути сборки проекта, как видно из представления журнала ошибок.
Например: Проблема: ... m2 \ репозиторий \ ком \ fasterxml \ джексон \ ядро \ ДЖЕКСОНА-ядро \ 2.5.0 \ ДЖЕКСОНА-ядро-2.5.0.jar не на его сборки путь проекта
Решение: Перейдите к .m2 reposistory и удалить папку fasterxml
Скачать все фактические зависимости от ваших проектов
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
Переместите локальный репозиторий Maven для временного расположения
mv ~/.m2 ~/saved-m2
Переименовать все файлы Maven-метаданные 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 с минимальными затратами необходимых артефактов , Удалите локальное зеркало из файла конфигурации и из файловой системы.
Пробовал это, все еще получил: «Плагин не найден для префикса« зависимостей »в текущем проекте и в группах плагинов [org.apache.maven.plugins, org.codehaus.mojo], доступных из репозиториев [local (/ home/user/.m2/repository), mycentral (файл:/home/user/saved-m2 /)] " –
Я придумал служебную программу и размещен на GitHub для очистки старых версий библиотек в локальном репозитории Maven. Утилита по своему исполнению по умолчанию удаляет все старые версии артефактов, оставляя только последние. При желании он может удалить все моментальные снимки, источники, javadocs, а также группы или артефакты, которые могут быть принудительно/исключены в этом процессе. Эта кросс-платформа также поддерживает удаление на основе даты на основе последних дат доступа/загрузки.
- 1. Две зависимости maven от разных репозиториев
- 2. maven archiva очистить старые версии некоторых артефактов
- 3. Очистить старые данные от MsSql
- 4. Как очистить старые интерфейсы от каталога zc.relation?
- 5. как предотвратить maven от проверки иностранных репозиториев?
- 6. тест Maven зависимости от зависимости
- 7. Как очистить кеш Maven 3
- 8. Gradle: как включить зависимости от репозиториев для вывода файла aar
- 9. Maven зависимости от зависимостей
- 10. развертывание зависимостей android ndk от maven репозиториев
- 11. Может ли maven очистить удаление удаленной зависимости?
- 12. Есть ли способ очистить зависимости maven?
- 13. Очистить старые Метеор данные подписки
- 14. Notify.js очистить старые уведомления
- 15. Модуль тестирования Android (Gradle Plugin 1.3): зависимости от репозиториев maven, отличных от дефолта
- 16. Как очистить кеш зависимостей Heroku (неуправляемые зависимости maven)
- 17. Требование явной зависимости maven от транзитивной зависимости
- 18. Определение зависимости от другой зависимости явно Maven
- 19. Очистить старые сообщения activemq
- 20. Maven Несколько локальных репозиториев
- 21. Конфигурирование репозиториев Maven?
- 22. Maven передать все репозиториев отдельно
- 23. NoSuchMethodError - зависимости от Maven используют разные зависимости.
- 24. Как очистить папку .m2 Maven?
- 25. Исключить зависимости maven от springboot
- 26. Java-Maven Зависимости
- 27. Зависимости Maven от javax.persistence JAR?
- 28. Hadoop Maven Зависимости от MapReduce
- 29. Как найти зависимости от maven любого проекта?
- 30. Как вы обновляете зависимости maven от eclipse?
Просто удалите '.m2repository' папку. Он будет создан автоматически после компиляции проекта. – user2339071
или купить большой жесткий диск и не заботиться :) – smajlo
Может быть, есть более элегантное решение, чем ждать компиляции и потратить деньги на жесткий диск? :) ** Но серьезно **, я работаю удаленно на виртуальной машине, поэтому дисковое пространство (маленькое) и время компиляции (длинные) значительны. Вот почему я не могу просто сменить HDD или процессор. Поэтому мне нужно использовать его более эффективно. – Cherry