Простий спосіб позбутися * усього *, що генерується SBT?


81

Чи існує простий спосіб позбутися всього, що генерується в результаті виконання побудови SBT? Виявляється, це створює цільові каталоги всюди. Виконання

sbt clean clean-cache clean-lib clean-plugins

... не позбавляється від усіх.


Я теж хотів би це побачити і подав заявку: code.google.com/p/simple-build-tool/issues/detail?id=166
Лендон Кун,

Цей трекер випуску більше не використовується, тому я повторно подав його тут: github.com/sbt/sbt/issues/896
Робін Грін,

Відповіді:


69

У моїй системі (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прапор під час використання команди пошуку? Здається непотрібним та потенційно небезпечним.
unjankify

Для мене це добре працювало:find . -name target -type d -exec rm -r {} \;
unjankify

Частина "-f" команди 'rm' не потрібна, але в деяких системах це може бути кращим перед довгим списком підтверджень видалення.
RudeDude

3
@AlbertBikeev: можливо, sbt clean cleanFilesпрацює для вас
serv-inc

2
sbt clean cleanFiles
frostcs

6

Очевидно, що це дуже важливо для відтворюваних збірок на сервері інтеграції, такому як Дженкінс!

Переконайтеся, що всі файли, включаючи кеш-пам’ять ivy , зберігаються в робочій області сервера інтеграції, надавши такі аргументи командного рядка для sbt:

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

а потім натисніть кнопку Видалити робочу область в Jenkins або еквівалент на інших серверах інтеграції. Це неодмінно повинно це зробити!

Або якщо ви використовуєте останню версію сценарію запуску sbt, -no-shareзамість цього можете просто додати .


Якщо ви вже використовуєте Дженкінса, то плагін для очищення є чудовою альтернативою тому, щоб робоча область була очищена
ecoe

5

У 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 {} +

2

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

зміст Makefile:

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

а потім запустіть:

make clean

Мені подобається використовувати Makefiles як код як документацію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.