如何在非播放项目中启用SbtWeb?

时间:2014-09-11 09:24:10

标签: scala playframework sbt sbt-web

我有一个单项目构建,在Build.scala文件中实现,具有以下设置: scala lazy val root = Project( id = ProjectInfo.name, base = file("."), settings = Project.defaultSettings ++ Revolver.settings ++ Revolver.enableDebugging(port = 5050) ++ Twirl.settings ++ // more tasks omitted ++ Seq( mainClass in Compile := Some(launcherClassName), mainClass in Revolver.reStart := Some(launcherClassName), javaOptions in Revolver.reStart ++= List( "-XX:PermSize=256M", "-XX:MaxPermSize=512M", "-Dlogback.debug=false", "-Dlogback.configurationFile=src/main/resources/logback.xml" ), resolvers ++= projectResolvers, libraryDependencies ++= Dependencies.all, parallelExecution in Test := false, ) )

我想为项目添加sbt-web托管资产处理,因为我想处理coffeescript,等等。

我将sbt-coffeescript插件直接添加到plugins.sbt文件夹中的project文件中,实际上让它正常运行。所以现在当我运行web-assets:assets时,我在/src/main/coffeescript/foo.coffee中有一个coffeescript示例文件,它被编译为target/web/coffeescript/main/coffeescript/foo.js

不幸的是,当我只运行compilerun任务时,没有任何内容得到处理。如何在开发工作流程compile期间启用资产处理?

2 个答案:

答案 0 :(得分:2)

您遇到的问题是,在项目中指定依赖关系的旧式方法不适用于AutoPlugins(WebPlugin就是这样)。

具体做法是:

val foo = Project(
    id = "ok"
    base = file("ok")
    settings = defaultSettings // BAD!
)

即。如果你手动在项目上设置设置,你会告诉我“我知道我想要在这个项目上设置的所有设置,我想完全覆盖默认设置。”

sbt设置的加载顺序为:

  1. AutoPlugins(核心设置现在来自AutoPlugins)
  2. Project个实例
  3. 中定义的设置
  4. 在项目基本目录中的build.sbt个文件中定义的设置。
  5. 以上代码重新应用了0.13.x系列中的所有sbt默认设置,这将覆盖AutoPlugins之前启用的所有内容。这是设计上的,因为任何其他机制都不会是“正确的”。

    如果您要迁移到使用AutoPlugins,只需将您的构建修改为:

    lazy val root = Project(
      id = ProjectInfo.name,
      base = file("."))
      settings = 
        // NOTICE we dropped the defaultSettings
        Revolver.settings   
        ++ Revolver.enableDebugging(port = 5050)
        ++ Twirl.settings
        ++ // more tasks omitted
        ++ Seq(
          mainClass in Compile := Some(launcherClassName),
          mainClass in Revolver.reStart := Some(launcherClassName),
          javaOptions in Revolver.reStart ++= List(
            "-XX:PermSize=256M",
            "-XX:MaxPermSize=512M",
            "-Dlogback.debug=false",
            "-Dlogback.configurationFile=src/main/resources/logback.xml"
          ),
          resolvers ++= projectResolvers,
          libraryDependencies ++= Dependencies.all,
          parallelExecution in Test := false,
       )
    )
    

答案 1 :(得分:1)

要在编译时运行资产生成,我这样做了:

settings = ... ++ Seq(
  pipelineStages := Seq(rjs),
  (compile in Compile) <<= compile in Compile dependsOn (stage in Assets),
  // ...
)

当我运行compile时,还会执行stage命令,从而运行sbt-web的管道。 对我而言,问题是如何使生成的资产成为托管资源的一部分(我正在努力sbt-web使用xsbt-web-pluginliftweb