Шаблоны Twirl не видны в коде (распыление)
У меня есть проблемы с конфигурацией, которые я не вижу. Я следовал инструкциям, приведенным в последней twirl
README, но html
пакет не определен в соответствии с компилятором.
Я включил
sbt-twirl
плагин вproject/plugins.sbt
файлaddSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.0.3")
в
project/Build.scala
Я включил плагинlazy val root = Project(id = "proj", base = file(".")) .enablePlugins(play.twirl.sbt.SbtTwirl) .settings(rootSettings: _*)
Я разместил
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?