文档

§sbt 食谱

§连接到 Play 的开发模式

当 Play 在开发模式下运行时,即使用 sbt run 时,通常需要连接到它以启动开发所需的额外进程。这可以通过定义一个 PlayRunHook 来完成,它是一个具有以下方法的特征

现在假设您想在应用程序启动之前使用 grunt 构建一个 Web 应用程序。首先,您需要在 project/ 目录中创建一个 Scala 对象以扩展 PlayRunHook。让我们将其命名为 Grunt.scala

import play.sbt.PlayRunHook
import sbt._
import scala.sys.process.Process

object Grunt {
  def apply(base: File): PlayRunHook = {

    object GruntProcess extends PlayRunHook {

      override def beforeStarted(): Unit = {
        Process("grunt dist", base).run
      }
    }

    GruntProcess
  }
}

现在您可以在 build.sbt 中注册此钩子

PlayKeys.playRunHooks += Grunt(baseDirectory.value)

这将在每次运行 sbt run 时,在应用程序启动之前在 baseDirectory 中执行 grunt dist 命令。

现在我们想要修改我们的运行钩子,以便在发生更改时执行grunt watch命令来观察更改并重建 Web 应用程序,因此我们将修改之前创建的Grunt.scala文件

import play.sbt.PlayRunHook
import sbt._
import java.net.InetSocketAddress
import scala.sys.process.Process

object Grunt {
  def apply(base: File): PlayRunHook = {

    object GruntProcess extends PlayRunHook {

      var watchProcess: Option[Process] = None

      override def beforeStarted(): Unit = {
        Process("grunt dist", base).run
      }

      override def afterStarted(): Unit = {
        watchProcess = Some(Process("grunt watch", base).run)
      }

      override def afterStopped(): Unit = {
        watchProcess.map(p => p.destroy())
        watchProcess = None
      }
    }

    GruntProcess
  }
}

现在,当使用sbt run启动应用程序时,将执行grunt watch,以便在文件更改时重新运行 grunt 构建。

§添加编译器选项

例如,您可能希望添加功能标志以了解有关功能警告的详细信息

[info] Compiling 1 Scala source to ~/target/scala-2.10/classes...
[warn] there were 1 feature warnings; re-run with -feature for details

只需将-feature添加到scalacOptions属性中

scalacOptions += "-feature"

§添加其他资产目录

例如,您可以添加pictures文件夹作为其他资产目录

Assets / unmanagedResourceDirectories += baseDirectory.value / "pictures"

这将允许您使用此文件夹的routes.Assets.at

§配置外部化资源

从 Play 2.4 开始,默认情况下会将conf目录的内容添加到类路径中。
打包用于生产的 Play 应用程序时,该conf文件夹(或其内容)可能存在于两个地方
要么conf文件夹不会被打包到jar文件中(与应用程序的其余部分一起),而是保留在文件系统上的该jar文件外部。因此,该conf文件夹的内容(例如application.conf)可以被编辑,并且通过重新启动应用程序,任何更改都会立即被拾取 - 无需重新打包和重新部署应用程序。这是默认设置。
或者,Play 可以被配置为始终将conf文件夹的内容放入应用程序jar文件中。这可以通过设置来完成

PlayKeys.externalizeResources := false

build.sbt中。有时,这种行为对于某些库需要conf文件夹的(某些)资源和应用程序类文件位于同一个jar文件中才能正常工作的情况是必要的。

从 Play 2.7 开始,存在另一个配置键,允许您排除特定的资源,以便它们不会被外部化,即使当PlayKeys.externalizeResources := true时也是如此

PlayKeys.externalizeResourcesExcludes += baseDirectory.value / "conf" / "somefolder" / "somefile.xml"

由于这个配置键,您不再需要将conf文件夹的所有文件都放入jar文件中,而这只需要针对某些特定文件。

§禁用文档

为了加快编译速度,您可以禁用文档生成

Compile / doc / sources                := Seq.empty
Compile / packageDoc / publishArtifact := false

第一行将禁用文档生成,第二行将避免发布文档工件。

§配置 ivy 日志级别

默认情况下,ivyLoggingLevel设置为UpdateLogging.DownloadOnly。您可以使用以下方法更改此值

例如,如果您只想显示错误

ivyLoggingLevel := UpdateLogging.Quiet

§测试中的分叉和并行执行

默认情况下,并行执行被禁用,而分叉被启用。您可以通过设置 Test / parallelExecution 和/或 Test / fork 来更改此行为。

Test / parallelExecution := true
Test / fork              := false

下一步: 调试您的构建


发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。