在代码中无法看到旋转模板(喷涂应用程序)

时间:2014-11-19 01:20:38

标签: scala sbt spray twirl

我有一些我无法看到的配置问题。我已按照最新twirl自述文件中提供的说明进行操作,但根据编译器未定义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路径)

  4. 现在,如果我尝试导入html包(或com.somethin.cool.html),编译器会抱怨它未定义。我可以使用' twirlCompile'来编译模板。命令,它们在target子目录中正确生成,但它们对主项目是不可见的。

    注意:这是不是 PlayFramework项目

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

2 个答案:

答案 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组合?