scala - 如何让 sbt-web 在 Build.scala 中工作?

标签 scala sbt sbt-web

我有一个相当复杂的项目——它使用 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。)

最佳答案

我也在我的项目中使用来自 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 的自动插件功能。

关于scala - 如何让 sbt-web 在 Build.scala 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26392103/

相关文章:

java - 是否可以使用自动重新格式化从单行范围中删除括号?

scala - 如何在 Spark Streaming 中将 RDD 转换为 DataFrame,而不仅仅是 Spark

scala - 您可以使用 ScalaMock 捕获并检查提供给被测方法的参数吗?

scala - 配置 IntelliJ IDEA 进行 Specs2 测试的后台编译?

scala - 使用 sbt-native-packager 的任何好例子

scala - 如何系统地避免 Scala 中的不安全模式匹配?

playframework - 将 Play JSON 库添加到 sbt

sbt - 如何通过 SBT 项目依赖项将 sbt-web 输出与 xsbt-web-plugin 一起使用?

playframework-2.3 - Sbt-concat 支持多个bundle吗?

scala - 从 sbt 中的依赖项获取资源文件