Jak usunąć plik jar z lokalnego repozytorium Maven, które zostało dodane wraz z install: install-file?

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

Używam powyższego polecenia, aby zainstalować lokalny jar w lokalnym repozytorium maven. Teraz mam zależność od repozytorium Maven. Chcę to usunąć z lokalnego repozytorium. Jak to wyczyścić?

user1844840
źródło

Odpowiedzi:

107

Chociaż istnieje polecenie maven, które możesz wykonać, aby to zrobić, łatwiej jest po prostu ręcznie usunąć pliki z repozytorium.

Tak jak w systemie Windows Documents and Settings\your username\.m2lub $HOME/.m2Linux

Lagz0ne
źródło
10
Usunąłbym tylko .m2/repository directory. Współpracownik usunął wcześniej katalog .m2 i powoduje to problemy, ponieważ w naszym projekcie musimy zmodyfikować settings.xmlplik.
Tiris
7
Zwróć uwagę, że usuwając .m2/repositorykatalog, usuniesz również wszystkie pliki wtyczek maven. Podczas gdy za pomocą purge-local-repositorypolecenia usuwasz tylko zależności.
collinhaines
3
Struktura katalogów .m2/repositoryjest zorganizowana według identyfikatora grupy Maven, więc możesz po prostu usunąć podkatalog odpowiadający artefaktowi, który chcesz usunąć.
Kevin Krumwiede
124

Chociaż ręczne usuwanie plików działa, istnieje oficjalny sposób usuwania zależności projektu z lokalnego (pamięci podręcznej) repozytorium i opcjonalnie ponownego rozwiązywania ich ze zdalnych repozytoriów.

Cel purge-local-repository, w standardowej wtyczce zależności Maven, usunie lokalnie zainstalowane zależności tego projektu z pamięci podręcznej. Opcjonalnie możesz w tym samym czasie ponownie rozwiązać je ze zdalnych repozytoriów.

Powinno to być używane jako część fazy projektu, ponieważ dotyczy zależności dla projektu zawierającego. Domyślnie wyczyszczone zostaną również zależności przechodnie (lokalnie).

Jeśli chcesz jawnie usunąć pojedynczy artefakt z pamięci podręcznej, użyj purge-local-repositoryz manualIncludeparametrem. Na przykład z wiersza poleceń:

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

Dokumentacja sugeruje, że domyślnie nie usuwa to zależności przechodnich. Jeśli korzystasz z niestandardowej lokalizacji pamięci podręcznej lub na wielu platformach, są one bardziej niezawodne niż usuwanie plików „ręcznie”.

Pełna dokumentacja znajduje się w specyfikacji wtyczki maven-dependency-plugin .

Uwaga : Starsze wersje dependencywtyczki maven miały manual-purge-local-repositorycel, który obecnie (wersja 2.8) jest implikowany przez użycie manualInclude. Należy również przeczytać dokumentację dla manualIncludes(z s).

Steve Powell
źródło
Nie sądzę, aby to .jardziałało w przypadku plików, które nie zostały pobrane z centrali Maven lub innego repozytorium. Po uruchomieniu tego polecenia pozbywa się wszystkich .jarplików, które zostały automatycznie pobrane, ale kiedy dotrze do plików, .jarktóre zainstalowałem ręcznie, wyświetla ten komunikat o błędzie: [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
Właściwie po sprawdzeniu zdałem sobie sprawę, że odinstalowuje .jar, ale nadal wyświetla błąd. Więc w przypadku .jarplików, które zostały zainstalowane ręcznie, zalecałbym ręczne usuwanie zamiast korzystania z tej metody, ponieważ maven tworzy dziwne pliki, takie jak yourjar.jar.lastUpdatedi, yourjar.pom.lastUpdatedktóre i tak mogą wymagać ręcznego usunięcia. Ale jeśli maven zarządzał wszystkimi zależnościami automatycznie, jest to świetny sposób na odinstalowanie zależności.
stiemannkj1
To podejście wymaga również projektu maven, aby uruchomić polecenie. Wydaje się, że to nie działa, jeśli uruchomiłeś polecenie instalacji, które OP określił w kontekście, powiedzmy, kompilacji Gradle.
jdonmoyer
19

Przynajmniej w obecnej wersji mavena musisz dodać przełącznik -DreResolve = false, jeśli zamierzasz usunąć zależności z lokalnego repozytorium bez ich ponownego pobierania.

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

usuwa zależności bez ich ponownego pobierania.

rob2universe
źródło
czy mógłbyś
rzucić
12

Usuń wszystko (jar, pom.xml, itp.) Z ~/.m2/repository/phonegap/1.1.0/katalogu lokalnego, jeśli używasz systemu operacyjnego Linux.

Abimaran Kugathasan
źródło
Kiedy usuwam jar w ten sposób, „ponownie pobiera” jar ze starego folderu. Być może istnieją odniesienia, które również należy usunąć.
Antonio Sesto
0

Napotkałem ten sam problem, przeszedłem przez wszystkie powyższe sugestie, ale nic nie działało. W końcu usunąłem oba foldery .m2 i .ivy i zadziałało.

Nagesh Vashist
źródło
-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
Kent Yao
źródło
5
Ta odpowiedź może, ale nie musi, rozwiązać problem, ale co powiesz na dodanie wyjaśnienia do odpowiedzi, może to po prostu pomóc OP w zrozumieniu, co próbujesz mu pokazać.
Gerhard
2
Ta odpowiedź nie jest związana z problemem: pokazujesz konfigurację repozytorium git w folderze .m2 i resetujesz jako repozytorium git.
lquitadamo