Ответ 1
Используйте defaultExcludes
для задачи unmanagedResources
и, возможно, конфигурацию. Например, этот параметр исключает файлы .java из основных ресурсов:
defaultExcludes in Compile in unmanagedResources := "*.java"
in Compile
ограничивает этот параметр применимым только к основным ресурсам. Используя in Test
вместо этого, он будет применяться только к тестовым ресурсам. Отключив конфигурацию (то есть no in Compile
или in Test
), этот параметр будет применяться как к основным, так и к тестовым ресурсам.
in unmanagedResources
применяет эти исключения только для ресурсов. Например, для применения исключений к источникам будет in unmanagedSources
. Причина неуправляемой части заключается в том, чтобы подчеркнуть, что они применяются только к неуправляемым (или отредактированным вручную) источникам.
Клавиша defaultExcludes
имеет тип sbt.FileFilter, поэтому значение параметра должно быть такого типа. В приведенном выше примере "*.java"
неявно преобразуется в FileFilter. *
интерпретируется как подстановочный знак, поэтому фильтр принимает файлы с именем, которое заканчивается на ".java". Чтобы объединить фильтры, вы используете ||
и &&
. Например, если необходимо также исключить файлы .scala, аргументом :=
будет:
"*.java" || "*.scala"
В исходном наборе файлов Ant фильтры include и exclude выбирают взаимоисключающие наборы файлов, поэтому требуется только один.
Также можно напрямую построить Seq[File]
для unmanagedResources
. Например:
unmanagedResources in Compile <<=
unmanagedResourceDirectories in Compile map { (dirs: Seq[File]) =>
( dirs ** ("*.txt" || "*.csv" -- "*.java") ).get
}
Метод **
выбирает все потомки, которые соответствуют аргументу FileFilter
. Вы можете проверить, что файлы выбраны так, как вы ожидаете, запустив show unmanaged-resources
.