§使用 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+D
或 Enter
退出服务器时,您将返回到您的操作系统提示符。
默认情况下,服务器在端口 9000 上运行。可以指定自定义端口(例如 8080):sbt 'run 8080'
当然,**触发执行** 也在这里可用。
$ sbt ~run
§获取帮助
使用 help
命令获取有关可用命令的基本帮助。您也可以将它与特定命令一起使用以获取有关该命令的信息。
[my-first-app] $ help run
下一步:设置您首选的 IDE
发现此文档中的错误?此页面的源代码可以在 这里 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?前往 我们的社区论坛 与社区开始对话。