Як видалити файл jar із локального сховища Maven, який було додано разом із install: install-file?


122
mvn install:install-file -Dfile=phonegap-1.1.0.jar -DgroupId?=phonegap -DartifactId?=phonegap -Dversion=1.1.0 -Dpackaging=jar

Я використовую команду вище, щоб встановити локальну банку в maven local repo. Тепер я отримав залежність від maven repo. Я хочу видалити це з місцевого репо. Як його почистити?


Відповіді:


107

Хоча є команда maven, яку ви можете виконати для цього, простіше просто видалити файли вручну зі сховища.

Як це у Windows Documents and Settings\your username\.m2або $HOME/.m2в Linux


10
Я б видалив лише .m2/repository directory. Співробітник раніше видалив каталог .m2 і це спричиняє проблеми, оскільки в нашому проекті ми повинні змінити settings.xmlфайл.
Тіріс

7
Зверніть увагу, що при видаленні .m2/repository каталог, ви також будете видаляти всі файли плагінів Maven. Тоді як за допомогою purge-local-repositoryкоманди ви видаляєте лише залежності.
collinhaines

3
Структура каталогів .m2/repositoryвпорядкована ідентифікатором групи Maven, тому ви можете просто видалити підкаталог, відповідний артефакту, який ви хочете видалити.
Кевін Крумвіде

124

Хоча видалення файлів працює вручну, існує офіційний спосіб видалення залежностей вашого проекту з вашого локального сховища (кеш-пам'яті) та, можливо, повторного вирішення їх із віддалених сховищ.

Мета purge-local-repository, використовуючи стандартний плагін залежності Maven, видалить локально встановлені залежності цього проекту зі свого кешу. За бажанням ви можете одночасно їх повторно вирішити з віддалених сховищ.

Це слід використовувати як частину фази проекту, оскільки це стосується залежностей, що містять проект. Також транзитивні залежності будуть очищені (локально) також за замовчуванням.

Якщо ви хочете явно видалити один артефакт з кешу, використовувати purge-local-repositoryз manualIncludeпараметром. Наприклад, з командного рядка:

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId, ..."

З документації випливає, що це не усуває перехідні залежності за замовчуванням. Якщо ви працюєте з нестандартним розташуванням кешу або на декількох платформах, вони надійніші, ніж видалення файлів "від руки".

Повна документація міститься у специфікації плагінів залежності від Maven .

Примітка : Старіші версії dependencyплагіна Maven мали manual-purge-local-repositoryмету, яку тепер (версія 2.8) передбачає використання manualInclude. Необхідно також прочитати документацію для manualIncludess).


Я не вірю, що це працює для .jars, які не були завантажені з центрального Maven або якогось іншого сховища. Коли я запускаю цю команду, вона позбавляється від усіх .jarзавантажених автоматично, але коли вона потрапляє до .jars, яку я встановив вручну, вона видає це повідомлення про помилку: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.8:purge-local-repository (default-cli) on project alloy-generator: Failed to refresh project dependencies for: myartifact: required artifacts missing: [ERROR] manually-downloaded-and-installed.jar ...
stiemannkj1

3
Насправді, після того як я перевірив це, я зрозумів, що він не видаляє .jar, але все ж видає помилку. Так що для .jars, які були встановлені вручну, я б рекомендував видалити вручну, а не використовувати цей метод, тому що maven створює такі дивні файли, як yourjar.jar.lastUpdatedі yourjar.pom.lastUpdatedякі, можливо, вам потрібно буде видалити вручну. Але якщо maven впорався з усіма залежностями автоматично, це прекрасний спосіб видалення залежностей.
stiemannkj1

Цей підхід також потребує проекту maven для запуску команди. Це, здається, не працює, якщо ви запустили команду install, яку OP задав у контексті, наприклад, збірки Gradle.
jdonmoyer

19

Принаймні, до поточної версії maven вам потрібно додати перемикач -DreResolve = false, якщо ви збираєтесь видалити залежності з локального репо, не повторно завантажуючи їх.

mvn dependency:purge-local-repository -DreResolve=false

видаляє залежності, не завантажуючи їх знову.


могли б ви гляньте: stackoverflow.com/questions/58937713 / ...
gstackoverflow

12

Видаліть усі речі (jar, pom.xml тощо) з локального ~/.m2/repository/phonegap/1.1.0/каталогу, якщо ви використовуєте ОС Linux.


Коли я видаляю банку таким чином, вона "повторно завантажує" банку зі старої папки. Можливо, є посилання, які також потрібно видалити.
Антоніо Сесто

0

Я зіткнувся з тією ж проблемою, переглянув усі запропоновані вище пропозиції, але нічого не вийшло. Нарешті я видалив і .m2, і .vivy папку, і це працювало для мене.


-5
  1. cd ~/.m2
  2. git init
  3. git commit -am "some comments"
  4. cd /path/to/your/project
  5. mvn install
  6. cd ~/.m2
  7. git reset --hard

4
Ця відповідь може чи не може вирішити проблему, але як щодо додавання пояснення до своєї відповіді, це може просто допомогти ОП зрозуміти, що ви намагаєтесь показати йому.
Герхард

2
Ця відповідь не пов’язана з проблемою: ви показуєте налаштування сховища git у папці .m2 та скидаєте його як сховище git.
lquitadamo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.