2016-10-16 5 views
0

У меня есть проект, основанный на SBT-Web и Play Framework. Ну, Play используется только для разработки, затем (при запуске команды stage в SBT/Activator) все экспортируется на статические страницы и развертывается на каком-то веб-сервере, который, возможно, даже не установлен на Java.Создание статических активов из SBT Web

Мой текущий подход добавляет resourceGenerator:

resourceGenerators in Assets += Def.task { 
    for(year <- PageGenerator.Years) yield { 
    val file = (resourceManaged in Assets).value/"assets"/s"${year.year}.html" 
    println(s"Writing $file…") 
    IO.write(file, PageGenerator.forYear(year)) 
    file 
    } 
}.taskValue 

Это работает прямо сейчас, но она имеет некоторые недостатки:

  • Прежде всего, я не могу использовать подкаталоги. Когда я пытаюсь поместить файл в подкаталог, он помещается в root.
  • Когда я изменяю шаблон или исходные данные, мне необходимо перезагрузить проект, чтобы он стал эффективным.
  • Последнее, я бы немного оценил использование Twirl или что-то подобное там.

Как преодолеть эти недостатки? (Первый из них наиболее важен. Решение других недостатков является скорее меньшим преимуществом.)

  • Я попытался привести генерирующий код к стадии трубопровода. Это работает при создании финального артефакта, но во время разработки оно не работает.
  • Идея: используйте шаблон Twirl, динамически вызывайте его во время разработки и вызывайте его каким-то образом (используя некоторый ClassLoader и Reflection API) на стадии конвейера. Я не уверен, что это правильный путь. Я уверен, что код Scala/Twirl уже скомпилирован при выполнении этапов конвейера sbt-web?
  • Хакерная идея: сгенерируйте файлы для запуска проекта, динамически передайте их по маршрутам в режиме разработки, переименуйте их на стадии конвейера. Это тяжелый взлом, но он должен работать теоретически.

ответ

Смежные вопросы