§构建系统概述
Play 构建系统使用 sbt,这是一个用于 Scala 和 Java 项目的高性能集成构建工具。使用 sbt
作为我们的构建工具,对 Play 提出了一些要求,这些要求将在本页中说明。
§了解 sbt
sbt 的功能与许多传统的构建任务大不相同。从根本上说,sbt 是一个任务引擎。您的构建表示为需要执行的任务依赖项树,例如,compile
任务依赖于 sources
任务,而 sources
任务又依赖于 sourceDirectories
任务和 sourceGenerators
任务,等等。
sbt 将典型的构建执行分解成非常细粒度的任务,并且构建中的任何任务在任何时候都可以被任意地重新定义。这使得 sbt 非常强大,但也需要改变思维方式,如果您来自其他将构建分解成非常粗粒度任务的构建工具,则需要改变思维方式。
此处的文档在非常高的层面上描述了 Play 对 sbt 的使用。当您开始在项目中更多地使用 sbt 时,建议您遵循 sbt 教程,以了解 sbt 如何组合在一起。许多人发现有用的另一个资源是 这篇博客文章系列。
§Play 应用程序目录结构
大多数人使用我们的 示例模板 或 sbt new
命令开始使用 Play,这些命令通常会生成如下所示的目录结构
/
: 您的应用程序的根文件夹/README
: 一个描述您的应用程序的文本文件,该文件将与应用程序一起部署。/app
: 您的应用程序代码将存储在此处。/build.sbt
: 描述构建应用程序的 sbt 设置。/conf
: 应用程序的配置文件/project
: 进一步的构建描述信息/public
: 应用程序的静态公共资产存储在此处。/test
: 应用程序的测试代码将存储在此处。
现在,我们将关注 /build.sbt
文件和 /project
目录。
提示: 查看完整的 Play 应用程序的结构。
§/build.sbt
文件。
Play 的 sbt 构建文件通常看起来像这样
name := "foo"
version := "1.0-SNAPSHOT"
libraryDependencies ++= Seq(
jdbc,
anorm,
ehcache
)
lazy val root = (project in file(".")).enablePlugins(PlayScala)
name
行定义了应用程序的名称,它将与应用程序根目录的名称相同,即 /
。在 sbt 中,这是从您传递给 sbt new
命令的参数中推断出来的。
version
行提供应用程序的版本,该版本用作构建将生成的工件名称的一部分。
libraryDependencies
行指定应用程序依赖的库。您可以在 sbt 文档中查看有关如何在 sbt 文档中管理依赖项的更多详细信息。
最后,您需要在项目上启用一个 sbt 插件来使其“Play 化”。这将添加对 Play 特定功能的支持,例如 twirl 编译器和路由编译器,并将添加构建项目和运行服务器所需的 Play 库。通常,您应该为 Play 应用程序使用以下 Play 插件之一
- PlayScala
:标准 Play Scala 项目。
- PlayJava
:标准 Play Java 项目,带有 表单 模块。
- PlayMinimalJava
:最小的 Play Java 项目,没有表单支持。
默认情况下,PlayJava
和 PlayScala
插件不依赖于任何特定的依赖注入解决方案。如果您想使用 Play 的 Guice 模块,请将 guice
添加到您的库依赖项中
libraryDependencies += guice
§使用 scala 进行构建
sbt 也能够从项目 project
文件夹内的 scala 文件中构建构建要求。建议的做法是使用 build.sbt
,但有时需要直接使用 scala。如果您发现自己需要这样做,可能是因为您正在迁移一个旧项目,那么以下是一些有用的导入
import sbt._
import Keys._
import play.sbt._
import Play.autoImport._
import PlayKeys._
指示 autoImport
的行是导入 sbt 插件自动声明的属性的正确方法。同样,如果您正在导入 sbt-web 插件,那么您可能会
import com.typesafe.sbt.less.autoImport._
import LessKeys._
§/project
目录
与构建项目相关的所有内容都保存在应用程序目录下的 /project
目录中。这是 sbt 的要求。在该目录中,有两个文件
/project/build.properties
:这是一个标记文件,声明了使用的 sbt 版本。/project/plugins.sbt
:项目构建使用的 sbt 插件,包括 Play 本身。
§Play 插件 for sbt (/project/plugins.sbt
)
Play 控制台及其所有开发功能(如实时重载)都是通过 sbt 插件实现的。它在 /project/plugins.sbt
文件中注册。
addSbtPlugin("org.playframework" % "sbt-plugin" % playVersion) // where version is the current Play version, i.e. "3.0.x"
注意:当您更改 Play 版本时,必须手动更新
build.properties
和plugins.sbt
。
下一步:关于 sbt 设置
发现此文档中的错误?此页面的源代码可以在 此处 找到。在阅读 文档指南 后,请随时贡献拉取请求。有疑问或建议要分享?转到 我们的社区论坛 与社区开始对话。