Вопрос по – Добавить дополнительный каталог для очистки задачи в сборке SBT

9

У меня есть сборка SBT, где тесты создают временные файлы в каталог с именем temp. Как я могу сказать SBT удалить эту папку, когда я вызываю чистую задачу?

Разве твои тесты не должны убирать за собой? agilesteel
Фактически, в обычном случае тест очищает временные файлы. Но в этом случае мне нужны временные файлы, чтобы посмотреть, когда происходит сбой sth. Я просто хочу добавить временный каталог в каталоги, которые удаляет чистая задача. Felix
Какая семантика та же, что и уclean @agilesteel - очистить все, даже если предыдущий шаг не прошел или был остановлен, прежде чем перейти к нему. Не так ли? matanster

Ваш Ответ

4   ответа
13

Используйте этот параметр в проекте, содержащемtemp каталог:

cleanFiles <+= baseDirectory { base => base / "temp" }

Это добавляет каталог «temp» в список файлов, которые рекурсивно удаляются приclean бежит.

The< означает «настроить с точки зрения других задач / настроек»,+ означает добавление в текущий список файлов, аbaseDirectory - это параметр, обеспечивающий базовый каталог проекта.

Ты видишь, какclean настраивается с помощьюinspectоманда @, более подробно описанная на Проверка настроек страница. Отредактированный сеанс sbt показывает использование в этом случае:

> inspect clean
Task: Unit
Description:
    Deletes files produced by the build, such as generated sources, compiled classes, and task caches.
Dependencies:
    clean-files
    clean-keep-files

> inspect clean-files
Setting: scala.collection.Seq[java.io.File] = List(<project>/lib_managed, <project>/target, <project>/temp)
Description:
    The files to recursively delete during a clean.
Dependencies:
    managed-directory
    target
    base-directory

Вы можете увидеть, показывает ли это задачу или настройку, тип, описание и задачи / настройки, используемые в качестве входных данных.

Спасибо за подробный ответ. Снова я узнал кое-что больше о SBT. Теперь работает как шарм. Felix
Как мы можем добавить несколько каталогов одновременно? Благодарность marios
4

Марк Харра ответ устарела.

Here - это версия, которая работает для sbt 0.13 и выше, и является единственной из двух версий, которая работает в sbt 1.0 и более поздних версиях.

Обновлено ключ добавляется синтаксис.

До сб. 0,13 у тебя был<+= синтаксис для добавления дополнительных значений, и вы могли быapply на ключах.

С 0.13 был введен новый, более унифицированный синтаксис, частично называемыйvalue DSL. Начиная с 1.0 старый синтаксис был удален.

// From the old, apply-based version...
cleanFiles <+= baseDirectory { base => base / "temp" }

// ...we change to .value and collection-like syntax
cleanFiles += baseDirectory.value / "temp"

cleanFiles и другие ключи на основе коллекции теперь имитируют (изменяемую) коллекцию, поэтому вы можете добавлять значения к ней через+= оператор. Если у вас есть несколько значений, используйте++= сList илиSeq вместо.

.value не форсирует оценкуbaseDirectory когда ты пишешь это, но каждый разcleanFiles рассчитывается, поэтому он отличается для каждого подпроекта.

Обновлен синтаксис проверки и команд

Существует также небольшая разница вinspect clean-files синтаксис.

hyphen-named-commands устарела в 0.13 и удалена в 1.0. Они были заменены наlowerCamelCaseCommands, так что в консоли то же самое, что и в вашемbuild.sbt.

inspect больше не показывает значение вашего ключа (я не смог найти информацию о версии для этого). Вместо этого вы должны использоватьshow.

sbt:root-_t> show cleanFiles
[info] * C:\Users\Adowrath\_T\target\scala-2.12
[info] * C:\Users\Adowrath\_T\target\streams
[info] * C:\Users\Adowrath\_T\temp
[success] Total time: 0 s, completed 06.02.2018, 10:28:00
1

что ваши тесты вычищаются после себя, как заметил agilesteel.

Другая возможность заключается в том, что вы создаете пользовательскую задачу очистки, которая зависит от тестовой задачи. Смотрите мой ответ здесь для получения дополнительной информации о том, как настроить существующие задачи (например, тест в вашем случае): зависимость от существующего правила.

0

который работает для меня.

cleanFiles += new java.io.File(path)

Похожие вопросы