没有 Play 的最小 sbt-web 管道

Minimal sbt-web pipeline without Play

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

One last thing regarding the public and public-test folders... any WebJar depended on by the project will be automatically extracted into these folders e.g. target/web/public/lib/jquery/jquery.js.

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

[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

这是我的 project/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 文件夹。有什么想法吗?

参考文献:

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

教训是不要 copy/paste 像这样的片段:

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

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

  1. 如果 GitHub(等)页面有一个 "Build Passing" 标记,单击它导航到列出最新版本的构建服务器。
  2. 查看GitHub
  3. 中的分支
  4. 看看您是否可以导航到依赖项的存储库,例如 Maven Central,然后在那里浏览。我没有运气。我遇到的问题是我知道它不在 Maven 上,也不知道去哪里找。
  5. 在 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
    

我确信有更好的方法可以找到我不知道的最新版本。比我更有经验的朋友请用更好的方式评论。