Подтвердить что ты не робот

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

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

  • Я включил плагин 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), компилятор жалуется на него undefined. Я могу скомпилировать шаблоны с помощью команды "twirlCompile", и они правильно создаются в подкаталоге target, но они невидимы для основного проекта.

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

  • Scala: 2.10.4
  • sbt: 0.13.6
  • twirl: 1.0.3
4b9b3361

Ответ 1

Я также использую Twirl в проекте non-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

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

Если вы имеете в виду, что фактический 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 говорят мне, что они работают над исправлением для этого (я зарегистрировал проблему с ними об этом.)

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

Ответ 2

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

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

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

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