Как удалить файл 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. Теперь у меня есть зависимость от репозитория maven. Я хочу удалить это из локального репо. Как его почистить?

user1844840
источник

Ответы:

107

Хотя для этого вы можете выполнить команду maven, проще просто удалить файлы из репозитория вручную.

Как это в Windows Documents and Settings\your username\.m2или $HOME/.m2Linux

Lagz0ne
источник
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-plugin .

Примечание : старые версии dependencyплагина maven преследовали manual-purge-local-repositoryцель, которая теперь (версия 2.8) подразумевается использованием manualInclude. Также следует прочитать документацию для manualIncludes(с символом s).

Стив Пауэлл
источник
Я не верю, что это работает для .jars, которые не были загружены из maven central или какого-либо другого репозитория. Когда я запускаю эту команду, она избавляется от всех .jarавтоматически загружаемых s, но когда доходит до .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 ...
выводится следующее
3
Собственно, после того, как я его проверил, я понял, что он удаляет .jar, но все равно выдает ошибку. Поэтому для .jars, которые были установлены вручную, я бы рекомендовал удалить вручную, а не использовать этот метод, потому что maven создает некоторые странные файлы, такие как yourjar.jar.lastUpdatedи yourjar.pom.lastUpdatedкоторые вам может потребоваться удалить вручную в любом случае. Но если maven автоматически управляет всеми зависимостями, это отличный способ удалить зависимости.
stiemannkj1
Для этого подхода также требуется проект maven для запуска команды. Похоже, это не сработает, если вы выполнили команду установки, указанную OP в контексте, скажем, сборки Gradle.
jdonmoyer
19

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

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

удаляет зависимости без их повторной загрузки.

rob2universe
источник
не могли бы вы взглянуть: stackoverflow.com/questions/58937713/…
gstackoverflow
12

Удалите все (jar, pom.xml и т. Д.) В вашем локальном ~/.m2/repository/phonegap/1.1.0/каталоге, если вы используете ОС Linux.

Абимаран Кугатхасан
источник
Когда я удаляю банку таким образом, она «повторно загружает» банку из старой папки. Возможно, есть ссылки, которые тоже нужно удалить.
Антонио Сесто
0

Я столкнулся с той же проблемой, рассмотрел все предложения выше, но ничего не помогло. Наконец, я удалил обе папки .m2 и .ivy, и это сработало для меня.

Нагеш Вашист
источник
-6
  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
Кент Яо
источник
5
Этот ответ может решить или не решить проблему, но как насчет добавления пояснений к вашему ответу, это может просто помочь OP понять, что вы пытаетесь ему показать.
Герхард
2
Этот ответ не связан с проблемой: вы показываете настройку репозитория git в папке .m2 и сбрасываете его как репозиторий git.
lquitadamo