2017-02-09 9 views
0

Я хотел бы генерировать источники из файлов, которые являются частью проекта (в настоящее время я размещен в каталоге ресурсов, но это не является обязательным требованием).Как создать источники из ресурсов (или других файлов проекта) в SBT

Это моя попытка на него:

sourceGenerators in Test += (sourceManaged in Test map { src => 
    (unmanagedResourceDirectories in Test).value map { dir => 
    val file = dir/"demo"/src.name 
    IO.write(file, "Prefix---" + IO.read(src) + "---Postfix") 
    file 
    } 
}).taskValue 

Это дает мне ошибку:

 
error: Illegal dynamic dependency 
(unmanagedResourceDirectories in Test).value map { src => 

Что такое правильный способ сделать это?

ответ

1

Что работал в конце концов, это (вдохновленные this code, ссылка на комментарий к вопросу SBT sourceGenerators task - execute only if a file changes):

sourceGenerators in Test += Def.task { 
    val sources = (unmanagedResources in Test).value filter (_.isFile) 
    val dir = (sourceManaged in Test).value 
    sources map { src => 
    IO.write(dir/src.name, "Prefix---" + IO.read(src) + "---Postfix") 
    f 
    } 
}.taskValue 

важной частью было чтение настроек внутри задачи.

0

Я думаю, что динамические задачи правильный способ сделать это http://www.scala-sbt.org/0.13/docs/Tasks.html#Dynamic+Computations+with

+0

Надеюсь, вы правы, но могли бы вы привести более конкретный пример? До сих пор я не был успешным в своих экспериментах с ними. – Suma