我有一些我无法看到的配置问题。我已按照最新twirl
自述文件中提供的说明进行操作,但根据编译器未定义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
子目录中正确生成,但它们对主项目是不可见的。
答案 0 :(得分:10)
我同样在非Play项目中使用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
现在,要解决"编译器抱怨它的未定义" part:你可能意味着几件事。
如果你的意思是由sbt运行的实际Scala编译器找不到它,我从来没有遇到过这个问题。生成的源文件和.class文件位于target/scala_2.10/twirl/main
下的路径中。在这种情况下,您可能希望更清楚地了解编译器的抱怨和编译类路径。
但是,如果您的IDE意味着您无法识别源文件,那么您需要将目录target/scala_2.10/twirl/main
添加为项目使用的源目录之一。
我使用Twirl的另一个问题是IntelliJ IDEA 14 IDE并不真正支持旋转编译器,至少不在Play项目之外。每当我更新Twirl模板时,我总是不得不用sbt而不是IntelliJ IDEA的内置编译器来编译它。 JetBrains的人告诉我他们正在努力解决这个问题(我已经记录了他们的相关问题。)
更新(12/14/14):我记录的JetBrains问题是at this location。它的测试用例是here on github
答案 1 :(得分:3)
在sbt。
中显式添加非托管源目录可能会有所帮助unmanagedSourceDirectories in Compile += baseDirectory.value / "target" / "yourTwirlGeneratedSources"
然而,这肯定不是必要的!我想在运行compile
时,对twirlCompile
的依赖性也未得到解决,并且您的旋转文件中没有生成更新的源?
您是否尝试过使用以前的twirl + sbt组合?