文档

§使用 sbt 控制台

您可以使用 sbt 管理 Play 应用程序的完整开发周期。sbt 具有交互模式 (shell),或者您可以一次输入一个命令。交互模式随着时间的推移可能会更快,因为 sbt 只需启动一次。当您一次输入一个命令时,sbt 每次运行时都会重新启动。

§单个命令

您可以直接运行单个 sbt 命令。例如,要构建和运行 Play,请更改到项目的目录并运行

$ sbt run

您将看到类似以下内容

[info] Loading project definition from /Users/play-developer/my-first-app/project
[info] Set current project to my-first-app (in build file:/Users/play-developer/my-first-app/)

--- (Running the application from sbt, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)
The application starts directly. When you quit the server using Ctrl+D or Enter, the command prompt returns.

§交互模式

要以交互模式启动 sbt,请进入项目的顶层并输入不带参数的 sbt

$ cd my-first-app
my-first-app $  sbt

您将看到类似以下内容

[info] Loading global plugins from /Users/play-developer/.sbt/1.0/plugins
[info] Loading project definition from /Users/play-developer/my-first-app/project
[info] Updating {file:/Users/play-developer/my-first-app/project/}my-first-app-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to my-first-app (in build file:/Users/play-developer/my-first-app/)
[my-first-app] $

提示:您也可以在进入 sbt shell 之前运行一些命令,方法是在任务列表的末尾运行 shell。例如

$ sbt clean compile shell

§开发模式

在此模式下,sbt 启动 Play 并启用自动重新加载功能。当您发出请求时,如果任何文件已更改,Play 将自动重新编译并重新启动服务器。如果需要,应用程序将自动重新启动。

在 sbt 的交互模式下,要以开发模式运行当前应用程序,请使用 run 命令

[my-first-app] $ run

您将看到类似以下内容

$ sbt
[info] Loading global plugins from /Users/play-developer/.sbt/1.0/plugins
[info] Loading project definition from /Users/play-developer/tmp/my-first-app/project
[info] Done updating.
[info] Loading settings for project root from build.sbt ...
[info] Set current project to my-first-app (in build file:/Users/play-developer/tmp/my-first-app/)
[info] sbt server started at local:///Users/play-developer/.sbt/1.0/server/c9c53f40a402da68f71a/sock
[my-first-app] $ run
[info] Updating ...
[info] Done updating.
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.PekkoHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

§仅编译

您也可以在不运行 HTTP 服务器的情况下编译应用程序。compile 命令在命令窗口中显示任何应用程序错误。例如,在交互模式下,输入

[my-first-app] $ compile

您将看到类似以下内容

[my-first-app] $ compile
[info] Compiling 1 Scala source to /Users/play-developer/my-first-app/target/scala-2.13/classes...
[error] /Users/play-developer/my-first-app/app/controllers/HomeController.scala:21: not found: value Actionx
[error]   def index = Actionx { implicit request =>
[error]               ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed
[error] Total time: 1 s, completed Feb 6, 2017 2:00:07 PM
[my-first-app] $

如果您的代码没有错误,您将看到

[my-first-app] $ compile
[info] Updating {file:/Users/play-developer/my-first-app/}root...
[info] Resolving jline#jline;2.12.2 ...
[info] Done updating.
[info] Compiling 8 Scala sources and 1 Java source to /Users/play-developer/my-first-app/target/scala-2.13/classes...
[success] Total time: 3 s, completed Feb 6, 2017 2:01:31 PM
[my-first-app] $

§测试选项

您可以在不运行服务器的情况下运行测试。例如,在交互模式下,使用 test 命令

[my-first-app] $ test

test 命令将运行项目中的所有测试。您也可以使用 testOnly 来选择特定的测试。

[my-first-app] $ testOnly com.acme.SomeClassTest

§启动 Scala 控制台

输入 console 进入 Scala 控制台,它允许您交互式地测试代码。

[my-first-app] $ console

要在 Scala 控制台中启动应用程序(例如,访问数据库)

import play.api._
val env     = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
val context = ApplicationLoader.Context.create(env)
val loader  = ApplicationLoader(context)
val app     = loader.load(context)
Play.start(app)

§调试

您可以要求 Play 在启动控制台时启动一个 **JPDA** 调试端口。然后,您可以使用 Java 调试器连接。使用 sbt -jvm-debug <port> 命令来执行此操作。

$ sbt -jvm-debug 9999

当 JPDA 端口可用时,JVM 将在启动期间记录此行。

Listening for transport dt_socket at address: 9999

§使用 sbt 功能

您可以使用 sbt 功能,例如 **触发执行**。

例如,使用 ~ compile

[my-first-app] $ ~ compile

每次更改源文件时,都会触发编译。

如果您使用 ~ run

[my-first-app] $ ~ run

在开发服务器运行时,将启用触发编译。

您也可以对 ~ test 做同样的事情,以便每次修改源文件时持续测试您的项目。

[my-first-app] $ ~ test

如果您想使用 testOnly 命令只运行一小部分测试,这将特别有用。例如

[my-first-app] $ ~ testOnly com.acme.SomeClassTest 

每次修改源文件时,都会触发 com.acme.SomeClassTest 测试的执行。

§直接使用 play 命令

您也可以在不进入 Play 控制台的情况下直接运行命令。例如,输入 sbt run

$ sbt run
[info] Loading project definition from /Users/play-developer/my-first-app/project
[info] Set current project to my-first-app (in build file:/Users/play-developer/my-first-app/)

--- (Running the application from sbt, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Enter to stop and go back to the console...)

应用程序直接启动。当您使用 Ctrl+DEnter 退出服务器时,您将返回到您的操作系统提示符。

默认情况下,服务器在端口 9000 上运行。可以指定自定义端口(例如 8080):sbt 'run 8080'

当然,**触发执行** 也在这里可用。

$ sbt ~run

§获取帮助

使用 help 命令获取有关可用命令的基本帮助。您也可以将它与特定命令一起使用以获取有关该命令的信息。

[my-first-app] $ help run

下一步:设置您首选的 IDE


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