Шаблоны Twirl не видны в коде (распыление)

У меня есть проблемы с конфигурацией, которые я не вижу. Я следовал инструкциям, приведенным в последней twirl README, но html пакет не определен в соответствии с компилятором.

  1. Я включил sbt-twirl плагин в project/plugins.sbt файл

    addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.3")
    
  2. в project/Build.scala Я включил плагин

     lazy val root  = Project(id = "proj", base = file("."))
       .enablePlugins(play.twirl.sbt.SbtTwirl)
       .settings(rootSettings: _*)
    
  3. Я разместил page.scala.html в src/main/twirl подкаталог (напрямую или с помощью com/somethin/cool дорожка)

Теперь, если я пытаюсь импортировать html пакет (или com.somethin.cool.html) компилятор жалуется, что он не определен. Я могу скомпилировать шаблоны с помощью команды 'twirlCompile', и они правильно генерируются в target подкаталог, но они невидимы для основного проекта.

Примечание. Это не проект PlayFramework.

  • Scala: 2.10.4
  • сб: 0.13.6
  • вертеть: 1.0.3

2 ответа

Решение

Я так же использую Twirl в неигровом проекте.

Если вы поместили файл в src/main/com/somethin/cool тогда вы должны ожидать, что сгенерированный класс будет найден в com.somethin.cool.html.page

Если вы поместили файл в src/main/twirl/ тогда вы должны ожидать, что сгенерированный класс будет найден в twirl.html.page

Компилятор Twirl просматривает найденные файлы и помещает каталог "html" (расширение, на самом деле, это может быть "txt", "json" или...) в самый длинный общий подпуть файлов. Итак, скажем, у вас было:

src/main/com/somethin/cool/page1.scala.html
src/main/twirl/page2.scala.html

Тогда общий самый длинный подпуть файлов - это src / main (т. Е. Корень пути к классам). Затем вы получите эти классы по адресу:

html.com.somethin/cool/page1
html.twirl.page2

Теперь обратимся к части "компилятор жалуется, что она неопределенная": под этим можно подразумевать несколько вещей.

Если вы имеете в виду, что фактический компилятор Scala, запускаемый sbt, не находит его, у меня никогда не было проблем с этим. Сгенерированные исходные файлы и файлы.class находятся в пути под target/scala_2.10/twirl/main, В этом случае вам может потребоваться более четкое представление о жалобах компилятора и вашем пути к классам компиляции.

Но если вы имеете в виду, что ваша IDE не распознает исходный файл, вам нужно добавить каталог target/scala_2.10/twirl/main как один из исходных каталогов, используемых вашим проектом.

Еще одна проблема, связанная с использованием Twirl, заключается в том, что IntelliJ IDEA 14 IDE на самом деле не поддерживает twirl-компилятор, по крайней мере, за пределами проекта Play. Всякий раз, когда я обновляю шаблон Twirl, мне неизменно приходится компилировать его с помощью sbt вместо встроенного компилятора IntelliJ IDEA. Люди JetBrains говорят мне, что они работают над исправлением для этого (я записал проблему с ними об этом.)

ОБНОВЛЕНИЕ (14/14/14): проблема JetBrains, которую я зарегистрировал, находится в этом местоположении. Тестовый пример для этого здесь на GitHub

Это может помочь явно добавить неуправляемый исходный каталог в sbt.

unmanagedSourceDirectories in Compile += baseDirectory.value / "target" / "yourTwirlGeneratedSources" 

Однако это, конечно, не должно быть необходимым! Я полагаю, когда работает compile зависимость от twirlCompile также не будут разрешены, и обновленные источники не будут созданы из ваших файлов twirl?

Вы пробовали использовать предыдущие комбинации twirl + sbt?

Другие вопросы по тегам