4

我有一个相当复杂的项目——它使用 Play、Scala.js 和其他各种玩具。它暂时在 Build.scala 中构建,因为我还没有设法让所有部分都在 build.sbt 中工作。(我已经在 sbt 邮件列表中单独讨论过这个问题。)

现在,我想利用 Play 的新指纹识别功能,这意味着开始使用 sbt-web。不过,我显然做错了什么。我在我的 plugins.sbt 中添加了常用的管道插件:

addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.1")

addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.0.0")

addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0")

但是当我尝试将 SbtWeb 添加到项目的 JVM 端时:

lazy val scalajvm = Project(
  id = "scalajvm",
  base = file("scalajvm")
) enablePlugins (play.PlayScala, SbtWeb) settings (scalajvmSettings: _*) aggregate (scalajs)

sbt 抱怨它不知道 SbtWeb,并且不会加载。奇怪的。我添加了一个显式导入:

import com.typesafe.sbt.web.SbtWeb

这允许加载。然后,我试图让管道本身工作:

pipelineStages := Seq(digest, gzip),

现在它抱怨它不知道 pipelineStages。同样,我添加了一个显式导入,尽管我怀疑我做错了什么:

import com.typesafe.sbt.web.Import.pipelineStages

这让我进入下一步:它抱怨它不知道摘要——这完全是神秘的,因为我已经在我的 plugins.sbt 中指定了它。

有什么建议么?我的猜测是我在插件级别缺少一些东西,但我不知道它是什么。我能找到的所有文档都只列出了上面的内容,但我认为这都是假设 build.sbt。(是的,我在 build.properties 中指定了 sbt 0.13.5,在我的 plugins.sbt 中指定了 Play 2.3.5。)

4

2 回答 2

0

通常digest任务会自动导入,因为它是一个AutoPlugin. 您可以显式导入它:

import com.typesafe.sbt.digest.Import.digest
于 2014-11-02T03:11:47.267 回答
0

我也在我的项目中使用来自 Build.scala 的 sbt-web。您将需要以下导入:

 import com.typesafe.sbt.digest.Import._
 import com.typesafe.sbt.gzip.Import._
 import com.typesafe.sbt.rjs.Import._
 import com.typesafe.sbt.web.Import._

每个管道对象(类型的值TaskKey[Pipeline.Stage])都来自相应模块的 Import 对象。为什么它的结构是这样的,我不确定。我记得当我第一次开始这个工作时,我也对这个所需的包含有同样的好奇。我认为它的结构部分是为了支持 sbt 的自动插件功能。

于 2014-12-15T21:11:00.367 回答