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ć?


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


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).


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.


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.


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.


-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
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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.