Шаблоны 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.

  • Скала: 2.10.4
  • сбт: 0.13.6
  • вертеть: 1.0.3

person Rajish    schedule 19.11.2014    source источник


Ответы (2)


Точно так же я использую Twirl в проекте, отличном от Play.

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

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

person Reid Spencer    schedule 24.11.2014

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

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

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

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

person Moritz    schedule 22.11.2014