Eine einfache Möglichkeit, * alles *, was von SBT generiert wird, loszuwerden?

81

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.

Wilfred Springer
quelle
Ich würde das auch gerne sehen und habe ein Ticket eingereicht: code.google.com/p/simple-build-tool/issues/detail?id=166
Landon Kuhn
Dieser Issue-Tracker wird nicht mehr verwendet, daher habe ich ihn hier erneut eingereicht: github.com/sbt/sbt/issues/896
Robin Green

Antworten:

69

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:

sbt clean clean-files

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:

./project/project/project/target
./project/project/target
./project/target

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:

rmdir /s /q target project/target project/project/target

Das Beste, was ich tun kann, um automatisch zu finden, ist ein DIR-Befehl:

dir /ad /s /b | find "target"
RudeDude
quelle
Ist es erforderlich, das -fFlag zu haben, wenn der Befehl find verwendet wird? Scheint unnötig und möglicherweise unsicher.
Unjankify
Dies funktionierte gut für mich:find . -name target -type d -exec rm -r {} \;
Unjankify
Der "-f" -Teil des Befehls 'rm' sollte nicht benötigt werden, aber auf einigen Systemen ist er möglicherweise einer langen Liste von Löschbestätigungen vorzuziehen.
RudeDude
3
@ AlbertBikeev: sbt clean cleanFilesfunktioniert vielleicht für Sie
serv-inc
2
sbt clean cleanFiles
frostcs
6

Dies 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-sharestattdessen einfach hinzufügen .

Robin Green
quelle
Wenn Sie bereits Jenkins verwenden, ist das Bereinigungs-Plugin eine großartige Alternative, um sicherzustellen, dass der Arbeitsbereich gelöscht wird
ecoe
5

Unter Linux oder ähnlichem ist dies besser als find -name, da dadurch nicht versehentlich ein Verzeichnis mit dem Namen entfernt wird target, das möglicherweise in Ihrem Quellcode vorhanden ist:

find . -regextype posix-awk -regex \.(/project)*/target -exec rm -r {} +

Wenn Sie diesen Befehl in einer Shell ausführen, müssen Sie den regulären Ausdruck zitieren, z. B. für bash:

find . -regextype posix-awk -regex '\.(/project)*/target' -exec rm -r {} +

Bei BSD find (z. B. unter Mac OS X) lautet der Befehl:

find -E . -regex \.(/project)*/target -exec rm -r {} +
Adrian Hempel
quelle
2

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:

clean:
    find . -name target | xargs rm -fr

und dann ausführen:

make clean

Ich verwende gerne Makefiles als Code als Dokumentation.

Jose Miguel
quelle