Как очистить старые зависимости от хранилищ maven?

У меня слишком много файлов в папке .m2, где maven хранит загруженные зависимости. Есть ли способ очистить все старые зависимости? Например, если существует зависимость от 3 разных версий: 1, 2 и 3, после очистки должно быть только третье. Как я могу это сделать для всех зависимостей в папке .m2?

Ответ 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, а также группы или артефакты могут быть принудительно/исключены в этом процессе. Эта кроссплатформенная также поддерживает удаление на основе даты на основе последних дат доступа/загрузки.

https://github.com/techpavan/mvn-repo-cleaner

Ответ 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.