Простой способ избавиться от всего, сгенерированного SBT? - PullRequest
74 голосов
/ 19 декабря 2010

Есть ли простой способ избавиться от всего, что генерируется в результате выполнения сборки SBT?Оказывается, он создает целевые каталоги повсюду.Выполнение

sbt clean clean-cache clean-lib clean-plugins

... не избавляет от всего.

Ответы [ 4 ]

63 голосов
/ 25 июля 2014

В моей системе (Ubuntu Linux) с SBT 0.13.5 и некоторыми проектами из курса «Функциональное программирование Coursera» я обнаружил, что все папки составляют до 2,1 ГБ для 12 проектов из-за всех файлов кэша и дублированных загрузок Scala. *

Текущие команды SBT, которые работают и получают почти все очищено:

sbt clean clean-files

При этом удаляются папки «target» и «lib_managed» верхнего уровня (в данном случае с 23 МБ до 3,2 МБ), но некоторые целевые папки остаются в проекте:

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

Здесь очень полезна команда поиска Linux (также опубликованная @ jack-oconnor):

find . -name target -type d -exec rm -rf {} \;

Это возвращает нас к размеру 444 КБ для одного из моих собственных проектов, а объем 2,1 ГБ уменьшается до 5,0 МБ!

В окнах у вас не будет столько полезных опций командной строки, например, в именах путей нет звездных подстановочных знаков, но вы всегда можете попробовать сделать это с помощью:

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

Лучшее, что я могу сделать при автоматическом поиске, - это команда DIR:

dir /ad /s /b | find "target"
5 голосов
/ 02 октября 2013

Очевидно, что это очень важно для воспроизводимых сборок на сервере интеграции, таком как Jenkins!

Убедитесь, что все файлы, , включая кеш ivy , хранятся в рабочей области сервера интеграции, предоставив sbt:

такие аргументы командной строки
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy

, а затем нажмите кнопку Wipe Out Workspace в Jenkins или аналогичную на других серверах интеграции. Это определенно должно сделать это!

Или, если вы используете последнюю версию скрипта sbt launcher, вы можете просто добавить -no-share.

4 голосов
/ 21 февраля 2015

В Linux или аналогичной версии это лучше, чем find -name, поскольку он не будет случайно удалять каталог с именем target, который может существовать в вашем исходном коде:

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

Если вы запускаете эту команду в оболочке, вам нужно заключить в кавычки регулярное выражение, например, для bash:

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

В BSD find (например, в Mac OS X) команда будет выглядеть так:

find -E . -regex \.(/project)*/target -exec rm -r {} +
1 голос
/ 01 марта 2019

Я согласен с очень хорошими предлагаемыми решениями, лично я включаю небольшое изменение в качестве задачи создания GNU.

содержимое Makefile:

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

и затем запускаю:

make clean

Мне нравится использовать Makefiles в качестве кода в качестве документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...