14

我有一些我看不到的配置问题。我已按照最新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路径)

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

注意:这不是PlayFramework 项目

  • 斯卡拉:2.10.4
  • sbt:0.13.6
  • 旋转:1.0.3
4

2 回答 2

11

我同样在非 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

现在,要解决“编译器抱怨它是未定义的”部分:你可能意味着几件事。

如果你的意思是 sbt 运行的实际 Scala 编译器没有找到它,我从来没有遇到过这个问题。生成的源文件和 .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 上

于 2014-11-24T14:34:12.737 回答
3

在 sbt 中显式添加非托管源目录可能会有所帮助。

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

但是,这当然不是必需的!我想在运行时compile依赖twirlCompile也不会得到解决,并且不会从您的旋转文件生成更新的源?

您是否尝试过使用之前的 twirl + sbt 组合?

于 2014-11-22T10:51:43.980 回答