Подтвердить что ты не робот

Легкий способ избавиться от * всего *, созданного SBT?

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

sbt clean clean-cache clean-lib clean-plugins

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

4b9b3361

Ответ 1

Если вы используете git:

git clean -f -d -x

Это приведет к удалению каждого файла, не отслеживаемого git.

Ответ 2

В моей системе (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 МБ!

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

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

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

dir /ad /s /b | find "target"

Ответ 3

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

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

-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy

а затем нажмите кнопку "Протрите рабочую область" в Jenkins или эквивалент на других серверах интеграции. Это должно обязательно сделать это!

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

Ответ 4

В 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 (например, в Mac OS X) команда будет следующей:

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