Чи існує простий спосіб позбутися всього, що генерується в результаті виконання побудови SBT? Виявляється, це створює цільові каталоги всюди. Виконання
sbt clean clean-cache clean-lib clean-plugins
... не позбавляється від усіх.
Чи існує простий спосіб позбутися всього, що генерується в результаті виконання побудови SBT? Виявляється, це створює цільові каталоги всюди. Виконання
sbt clean clean-cache clean-lib clean-plugins
... не позбавляється від усіх.
Відповіді:
У моїй системі (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 find (також опублікована @ 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"
-f
прапор під час використання команди пошуку? Здається непотрібним та потенційно небезпечним.
find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
працює для вас
Очевидно, що це дуже важливо для відтворюваних збірок на сервері інтеграції, такому як Дженкінс!
Переконайтеся, що всі файли, включаючи кеш-пам’ять ivy , зберігаються в робочій області сервера інтеграції, надавши такі аргументи командного рядка для sbt:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
а потім натисніть кнопку Видалити робочу область в Jenkins або еквівалент на інших серверах інтеграції. Це неодмінно повинно це зробити!
Або якщо ви використовуєте останню версію сценарію запуску sbt, -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 find (наприклад, на Mac OS X) команда буде такою:
find -E . -regex \.(/project)*/target -exec rm -r {} +
Я погоджуюсь з дуже хорошими запропонованими рішеннями, особисто я включаю невелику варіацію як завдання створення гну.
зміст Makefile:
clean:
find . -name target | xargs rm -fr
а потім запустіть:
make clean
Мені подобається використовувати Makefiles як код як документацію.