Ostatnio wydaje się, że Apache Maven ma problemy z buforowaniem. Wykonywanie czystych instalacji w naszych projektach przy użyciu systemu Windows Vista lub Windows 7 czasami wytwarza artefakty z tymi samymi danymi co poprzednia kompilacja, nawet jeśli pliki nowszych artefaktów powinny zostać zaktualizowane.
Czy jest jakiś sposób, aby wyczyścić tę pamięć podręczną, aby zmusić maven, aby zawsze uruchamiał czystą wersję lokalnego artefaktu, który powinien zostać zbudowany?
W szczególności mamy problemy z budowaniem aplikacji internetowej za pomocą wtyczki wojennej. Wersja Maven to 3.0.3. Wersja wtyczki wojennej to 2.1.1.
-U
flagi, która aktualizuje artefakty?mvn clean install
umieścić nowe artefakty w lokalnym repozytorium?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Odpowiedzi:
Usuń
c:\Users\<username>\.m2\repository
ręcznie artefakty (lub pełne repozytorium lokalne) .źródło
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
końcu działałoAby wyczyścić lokalną pamięć podręczną, spróbuj użyć wtyczki zależności.
mvn dependency:purge-local-repository
: Jest to próba usunięcia plików lokalnego repozytorium, ale zawsze idzie i wypełnia lokalne repozytorium po usunięciu rzeczy.mvn dependency:purge-local-repository -DreResolve=false
: Pozwala to uniknąć ponownego rozwiązywania zależności, ale wydaje się, że czasami przechodzi do sieci.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Dodał to Paweł Prażak i wydaje się, że działa dobrze. Użyłbym trzeciego, jeśli chcesz opróżnić lokalne repo, i pierwszego, jeśli chcesz po prostu wyrzucić lokalne repo i ponownie uzyskać zależności.źródło
<User_Name>/.m2
lokalizacja. Nie jestem pewien, czy to byłby powód.Czy sprawdziłeś / zmieniłeś ustawienia updatePolicy dla swoich repozytoriów w twoim
settings.xml
.Spróbuj to ustawić
always
.źródło
<updatePolicy>
w moim pliku pom.xml, ale jest<snapshotPolicy>
Zrobiłbym następujące:
Flagi informują maven, aby nie próbował rozwiązywać zależności ani nie uderzał w sieć. Usuń to, co widzisz lokalnie.
Na wszelki wypadek ignoruj błędy (
--fail-at-end
) do samego końca. Czasami jest to przydatne w przypadku projektów, które mają nieco pomieszany zestaw zależności lub polegają na nieco pomieszanym wewnętrznym repozytorium (zdarza się.)źródło
Działa to w Spring Tool Suite v 3.1.0. RELEASE, ale domyślam się, że jest on również dostępny w Eclipse.
Po ręcznym usunięciu artefaktów (jak podano powyżej w palacsint) w
/username/.m2
katalogu, ponownie zindeksuj pliki, wykonując następujące czynności:Iść do:
Windows->Preferences->Maven->User Settings
menu.Kliknij
Reindex
przycisk obokLocal Repository
pola tekstowego. Kliknij „Zastosuj”, a następnie „OK” i gotowe.źródło
Jak zauważyły niektóre odpowiedzi, czasami naprawdę chcesz całkowicie usunąć lokalne repozytorium, na przykład mogą istnieć pewne artefakty, których nie można usunąć, ponieważ pom nie są już przywoływane przez pom.
Jeśli chcesz, aby to usunięcie zostało osadzone w fazie maven, na przykład
clean
możesz użyćmaven-clean-plugin
i uzyskać dostęp do repozytorium poprzez ustawienia, na przykład:źródło
Użyj,
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
jeśli masz wtyczki maven jako jeden z modułów. W przeciwnym razie Maven spróbuje je ponownie skompilować, ponownie pobierając zależności.źródło
Miałem ten sam problem i napisałem, żeby to zrobić.
Zrobiłem to jako jedno-liniowy, ponieważ chciałem mieć projekt Jenkins, aby po prostu uruchamiał to w dowolnym momencie, więc nie musiałbym logować się do rzeczy itp. Jeśli pozwolisz sobie na skrypt powłoki, możesz napisać to czystsze:
Powinien działać, ale nie przetestowałem całego tego skryptu. (Przetestowałem pierwsze polecenie, ale nie cały skrypt). Takie podejście ma tę wadę, że najpierw uruchamia duże, skomplikowane polecenie. Jest idempotentny, więc możesz to sprawdzić na własne oczy. Usunięcie jest potem jego własnym poleceniem, co pozwala wypróbować wszystko i sprawdzić, czy robi to, co myślisz, ponieważ działa, ponieważ nie powinieneś ufać poleceniom usuwania bez weryfikacji. Jest jednak sprytny z jednego dobrego powodu: jest przenośny. Szanuje twój plik settings.xml. Jeśli uruchomisz to polecenie i powiesz maven, aby używał określonego pliku xml (argument -s lub --settings), to nadal będzie działać. Nie musisz więc bawić się, upewniając się, że wszystko jest takie samo.
Jest trochę władczy, ale to dobry sposób na robienie interesów, IMO.
źródło
Jest więc kilka poleceń, których można użyć do czyszczenia
pomocne może być również usunięcie folderu repozytorium z .m2.
źródło