2

我正在使用 Spray 创建单页应用程序,但无法让 sbt-web 处理我的任何输入。我从 WebJars 开始,因为https://github.com/sbt/sbt-web/blob/master/README.md说:

关于 public 和 public-test 文件夹的最后一件事......项目依赖的任何 WebJar 都将自动提取到这些文件夹中,例如 target/web/public/lib/jquery/jquery.js。

但是,我在目标文件夹中看不到这样的“网络”文件夹。我想也许 WebJars 的例子太复杂了,所以我改为在资产文件夹的根目录中添加了一个 jquery.js 文件,并设置 sbt-uglify 对其进行一些处理。然而,我仍然没有看到 SbtWeb 有效的证据。我已经运行sbt --debug clean run并 grepped 了来自 SbtWeb 或 Uglify 的任何输出的输出,但没有错误或警告,并且在 SbtWeb 或 Uglify 中找不到任何内容。只需承认它似乎“推断”了插件:

[debug] deducing auto plugins based on known facts [debug]   :: sorting:: found: 
...
[debug]   :: sorted deduced result: List(sbt.plugins.CorePlugin, com.typesafe.sbt.web.SbtWeb, com.typesafe.sbt.jse.SbtJsEngine, net.ground5hark.sbt.concat.SbtConcat, sbt.plugins.IvyPlugin, com.typesafe.sbt.jse.SbtJsTask, sbt.plugins.JvmPlugin, com.typesafe.sbt.uglify.SbtUglify, sbt.plugins.JUnitXmlReportPlugin)

这是我的目录结构:

./build.sbt
./project/plugins.sbt
./src/main/assets/js/jquery.js
./src/main/resources/html/uikit/login.html
./src/main/scala/Boot.scala
./src/main/scala/main.scala

这是我的项目/plugins.sbt:

resolvers += Resolver.sonatypeRepo("releases")

addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")
addSbtPlugin("net.ground5hark.sbt" % "sbt-concat" % "0.1.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-uglify" % "1.0.3")

这是我的./build.sbt:

organization  := "com.test123.spray"

version       := "0.1"

scalaVersion  := "2.11.6"

scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")

libraryDependencies ++= {
  val akkaV = "2.3.9"
  val sprayV = "1.3.3"
  Seq(
    "io.spray"            %%  "spray-can"     % sprayV,
    "io.spray"            %%  "spray-routing" % sprayV,
    "io.spray"            %%  "spray-testkit" % sprayV  % "test",
    "com.typesafe.akka"   %%  "akka-actor"    % akkaV,
    "com.typesafe.akka"   %%  "akka-testkit"  % akkaV   % "test",

    // client side dependencies
    "org.webjars" % "jquery" % "2.1.4",
    "org.webjars" % "uikit" % "2.24.2"

  )
}

lazy val root = (project.in(file("."))).enablePlugins(SbtWeb)

pipelineStages := Seq(uglify)

includeFilter in uglify := GlobFilter("js/*.js")

这是我的 ./target 文件夹的根目录:

resolution-cache/
scala-2.11/
streams/

没有./target/web文件夹。任何想法为什么?

参考:

4

1 回答 1

2

那会学我的。我使用的是旧版本的 sbt-web。当我将其更新到最新版本时,它按预期工作。

教训是不要像这样复制/粘贴片段:

addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.2")

来自网络。但是,宁可通过以下方法之一手动查找最新版本:

  1. 如果 GitHub (et al) 页面有“Build Passing”标志,单击它导航到列出最新版本的构建服务器。
  2. 查看 GitHub 中的分支
  3. 查看是否可以导航到依赖项的存储库,例如 Maven Central,然后在那里浏览。我没有运气。我遇到的问题是我知道它不在 Maven 上,也不知道该去哪里找。
  4. 在 SBT 中插入一些伪造的版本,并查看 SBT 尝试查找并失败的输出:

    [warn]  module not found: com.typesafe.sbt#sbt-web;3.1.2
    [warn] ==== typesafe-ivy-releases: tried
    [warn]   http://repo.typesafe.com/typesafe/ivy-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml
    [warn] ==== sbt-plugin-releases: tried
    [warn]   http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/com.typesafe.sbt/sbt-web/scala_2.10/sbt_0.13/3.1.2/ivys/ivy.xml
    

我很肯定有更好的方法可以找到我不知道的最新版本。对于那些比我更有经验的人,请以更好的方式发表评论。

于 2015-12-28T20:29:11.280 回答