Есть ли простой способ избавиться от всего, что генерируется в результате выполнения сборки SBT? Оказывается, он создает целевые каталоги повсеместно. Выполнение
sbt clean clean-cache clean-lib clean-plugins
... не избавляется от всех.
Есть ли простой способ избавиться от всего, что генерируется в результате выполнения сборки SBT? Оказывается, он создает целевые каталоги повсеместно. Выполнение
sbt clean clean-cache clean-lib clean-plugins
... не избавляется от всех.
Если вы используете git:
git clean -f -d -x
Это приведет к удалению каждого файла, не отслеживаемого git.
В моей системе (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"
Очевидно, это очень важно для воспроизводимых построений на сервере интеграции, таком как Jenkins!
Убедитесь, что все файлы, включая кэш плюща, хранятся в рабочей области сервера интеграции, путем предоставления аргументов командной строки, таких как sbt:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
а затем нажмите кнопку "Протрите рабочую область" в Jenkins или эквивалент на других серверах интеграции. Это должно обязательно сделать это!
Или, если вы используете последнюю версию sbt launcher script, вы можете просто добавить -no-share
.
В 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 {} +