Gibt es eine einfache Möglichkeit, alles loszuwerden, was durch die Durchführung eines SBT-Builds generiert wird? Es stellt sich heraus, dass überall Zielverzeichnisse erstellt werden. Durchführen
sbt clean clean-cache clean-lib clean-plugins
... wird nicht alles los.
Antworten:
Auf meinem System (Ubuntu Linux) mit SBT 0.13.5 und einigen Projekten aus dem Coursera Functional Programming-Kurs stellte ich fest, dass die Ordner für 12 Projekte aufgrund aller Cache-Dateien und doppelten Scala-Downloads insgesamt bis zu 2,1 GB groß waren.
Die aktuellen SBT-Befehle, die funktionieren und fast alles bereinigen, sind:
Dadurch werden die Ordner "Ziel" und "lib_managed" der obersten Ebene entfernt (23 MB bis zu 3,2 MB in diesem Fall), einige Zielordner bleiben jedoch unter Projekt:
Hier ist der Linux-Befehl find (ebenfalls von @ jack-oconnor gepostet) sehr hilfreich:
find . -name target -type d -exec rm -rf {} \;
Dies bringt uns für ein meiner eigenen Projekte auf nur 444 KB zurück und die 2,1 GB gehen auf 5,0 MB zurück!
In Windows haben Sie nicht so viele nützliche Befehlszeilenoptionen, z. B. keine Stern-Platzhalter in Pfadnamen, aber Sie können immer versuchen, dies zu erzwingen mit:
Das Beste, was ich tun kann, um automatisch zu finden, ist ein DIR-Befehl:
dir /ad /s /b | find "target"
quelle
-f
Flag zu haben, wenn der Befehl find verwendet wird? Scheint unnötig und möglicherweise unsicher.find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
funktioniert vielleicht für SieDies ist natürlich sehr wichtig für reproduzierbare Builds auf einem Integrationsserver wie Jenkins!
Stellen Sie sicher, dass alle Dateien, einschließlich des Efeu-Cache , im Arbeitsbereich des Integrationsservers gespeichert sind, indem Sie sbt folgende Befehlszeilenargumente bereitstellen:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
Klicken Sie dann in Jenkins auf die Schaltfläche Arbeitsbereich löschen oder in anderen Integrationsservern auf die entsprechende Schaltfläche. Das sollte es auf jeden Fall tun!
Wenn Sie eine aktuelle Version des sbt-Startskripts verwenden, können Sie
-no-share
stattdessen einfach hinzufügen .quelle
Unter Linux oder ähnlichem ist dies besser als
find -name
, da dadurch nicht versehentlich ein Verzeichnis mit dem Namen entfernt wirdtarget
, das möglicherweise in Ihrem Quellcode vorhanden ist:Wenn Sie diesen Befehl in einer Shell ausführen, müssen Sie den regulären Ausdruck zitieren, z. B. für bash:
Bei BSD find (z. B. unter Mac OS X) lautet der Befehl:
find -E . -regex \.(/project)*/target -exec rm -r {} +
quelle
Ich stimme den sehr guten Lösungsvorschlägen zu, persönlich füge ich eine kleine Variation als Gnu-Make-Aufgabe hinzu.
Inhalt von Makefile:
und dann ausführen:
Ich verwende gerne Makefiles als Code als Dokumentation.
quelle