Czy istnieje łatwy sposób na pozbycie się wszystkiego, co jest generowane w wyniku wykonania kompilacji SBT? Okazuje się, że tworzy docelowe katalogi w każdym miejscu. Działający
sbt clean clean-cache clean-lib clean-plugins
... nie pozbywa się wszystkiego.
Odpowiedzi:
W moim systemie (Ubuntu Linux) z SBT 0.13.5 i niektórymi projektami z kursu Coursera Functional Programming znalazłem wszystkie foldery o łącznej wielkości 2,1 GB dla 12 projektów ze względu na wszystkie pliki pamięci podręcznej i zduplikowane pliki do pobrania Scala.
Aktualne polecenia SBT, które działają i usuwają prawie wszystko, to:
Spowoduje to usunięcie folderów „target” i „lib_managed” najwyższego poziomu (w tym przypadku od 23 MB do 3,2 MB), ale pozostawi niektóre foldery docelowe w projekcie:
W tym miejscu bardzo pomocne jest polecenie znajdowania systemu Linux (również opublikowane przez @ jack-oconnor):
find . -name target -type d -exec rm -rf {} \;
To sprowadza nas z powrotem do zaledwie 444 KB dla jednego z moich własnych projektów, a 2,1 GB spadło do 5,0 MB!
W systemie Windows nie będziesz mieć tylu przydatnych opcji wiersza poleceń, np. Brak symboli wieloznacznych w nazwach ścieżek, ale zawsze możesz spróbować wymusić to za pomocą:
Najlepsze, co mogę zrobić, aby automatycznie znaleźć, to polecenie DIR:
dir /ad /s /b | find "target"
źródło
-f
flagi podczas używania polecenia find? Wydaje się niepotrzebne i potencjalnie niebezpieczne.find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
działa dla CiebieOczywiście jest to bardzo ważne w przypadku odtwarzalnych kompilacji na serwerze integracyjnym, takim jak Jenkins!
Upewnij się, że wszystkie pliki, w tym pamięć podręczna bluszczu , są przechowywane w obszarze roboczym serwera integracyjnego, dostarczając argumenty wiersza poleceń, takie jak ten, do sbt:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
a następnie kliknij przycisk Wipe Out Workspace w Jenkins lub jego odpowiednik na innych serwerach integracyjnych. To zdecydowanie powinno wystarczyć!
Lub, jeśli używasz najnowszej wersji skryptu uruchamiania SBT, możesz po prostu dodać
-no-share
zamiast tego.źródło
W systemie Linux lub podobnym jest to lepsze niż
find -name
, ponieważ nie spowoduje przypadkowego usunięcia katalogu o nazwie,target
który może istnieć w kodzie źródłowym:Jeśli uruchamiasz to polecenie w powłoce, musisz zacytować wyrażenie regularne, na przykład dla bash:
W przypadku wyszukiwania BSD (np. W systemie Mac OS X) polecenie będzie wyglądać następująco:
find -E . -regex \.(/project)*/target -exec rm -r {} +
źródło
Zgadzam się z bardzo dobrymi sugerowanymi rozwiązaniami, osobiście dołączam niewielką zmianę jako zadanie tworzenia gnu.
zawartość Makefile:
a następnie uruchom:
Lubię używać Makefiles jako kodu jako dokumentacji.
źródło