Play 2.0 中文资料 - 创建一个新的应用

用 play 命令创建一个应用


创建一个新应用最初的方式是用 play new 命令.
1$ play new myFirstApp

这会询问你一些信息.
  • 应用的名称 (仅用于显示, 这个名称后面将在几个消息中使用到).
  • 用于这个应用的模板. 你可以从 默认的 Scala 应用, 默认的 Java 应用, 和 空应用 三个选项目中选择.

Unmi 注: 新版 play new 命令允许你带上目录名,让你在指定的目录下创建应用,在 2.0-beta 版中,只是在当前目录下创建你的应用。运行 play help 看显示的 new 是否是: new [directory]    Create a new Play application in the specified directory. 就知道能否指定应用的目录。

并且此时的 play new 命令可以用
1$ play new ~/Desktop/unmi

这样就会在 ~/Desktop/unmi 目录中创建应用,后面的提示是一样的. 在 ~/Desktop/unmi 目录下有应用所需的 app, conf, public 等目录。

注: 你此时选择了一个模板之后,并不意味着以后不能更改程序的语言. 例如, 你可以选择应用基于默认的 Java 应用模板创建, 以后只要你喜欢,随时都可以加入 Scala 代码.
一旦应用创建好了, 你可以再次使用 play 命令进入到  Play 2.0 控制台 .
1$ cd myFirstApp
2$ play

在尚未安装 Play 的情况下创建应用

你还可以在没安装 Play 的情况下创建一个 Play 应用, 使用 sbt.
首先得安装 sbt 0.11.2  这是必需的.
Unmi 注: sbt 是 Simple Build Tool 的简称,是 Scala 的正统的项目构建工具,它就像 Java 的 Maven 和 Ant。它的 .sbt 构建文件定义就是基于 Scala 的 DSL 实现。sbt 更灵活之处是配置正确的 resolver, 还能使用 Maven 的依赖仓库。


先要为你的应用创建一个目录并给 sbt 构建脚本添加两个附件(additions).

在项目的 project/plugins.sbt 文件中添加以下内容:
1// The Typesafe repository
2resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
3
4// Use the Play sbt plugin for Play projects
5addSbtPlugin("play" % "sbt-plugin" % "2.0")

确保用你想要的确切的版本号替换这里的 2.0. 假如你想要使用一个快照版本, 应该指定额外的解析器(resolver):
1// Typesafe snapshots
2resolvers += "Typesafe Snapshots" at "http://repo.typesafe.com/typesafe/snapshots/"

在项目的 project/Build.scala 文件中:
 1import sbt._
 2import Keys._
 3import PlayProject._
 4
 5object ApplicationBuild extends Build {
 6    val appName = "My first application"
 7    val appVersion = "1.0"
 8
 9    val appDependencies = Nil
10    val main = PlayProject(
11        appName, appVersion, appDependencies, mainLang = SCALA
12    )
13}

接着你可以在控制台中,项目目录下运行 sbt 命令:
1$ cd myFirstApp
2$ sbt

sbt 将会加载你的项目并抓取依赖.

从此以下都是 Unmi 注:plugins.sbt 和 Build.scala 两文件的位置,比如项目目录是 ~/myFirstApp, 那么他们应该放在 ~/myFirstApp/project 目录下。

上面的 sbt 命令一运行后,会像 Maven 那样去找到相应的依赖包去下载,控制台下显示类似的信息:
 1$ cd ~/myFirstApp
 2$ sbt
 3[info] Loading project definition from /Users/Unmi/myFirstApp/project
 4[info] Updating {file:/Users/Unmi/myFirstApp/project/}default-cf7b4e...
 5[info] Resolving play#sbt-plugin;2.0 ...
 6[info] Resolving play#play_2.9.1;2.0 ...
 7[info] Resolving play#templates_2.9.1;2.0 ...
 8[info] Resolving com.github.scala-incubator.io#scala-io-file_2.9.1;0.2.0 ...
 9[info] Resolving com.github.scala-incubator.io#scala-io-core_2.9.1;0.2.0 ...
10[info] Resolving org.scala-lang#scala-library;2.9.1 ...
11[info] Resolving com.github.jsuereth.scala-arm#scala-arm_2.9.1;0.3 ...
12[info] Resolving play#anorm_2.9.1;2.0 ...
13[info] Resolving io.netty#netty;3.3.0.Final ...
14................................................................
15[info] downloading http://repo.typesafe.com/typesafe/ivy-releases/play/sbt-plugin/scala_2.9.1/sbt_0.11.2/2.0/jars/sbt-plugin.jar ...
16[info]     [SUCCESSFUL ] play#sbt-plugin;2.0!sbt-plugin.jar (10078ms)
17[info] downloading http://repo.typesafe.com/typesafe/releases/play/play_2.9.1/2.0/play_2.9.1-2.0.jar ...
18[info]     [SUCCESSFUL ] play#play_2.9.1;2.0!play_2.9.1.jar (51120ms)
19[info] downloading http://repo.typesafe.com/typesafe/releases/play/templates_2.9.1/2.0/templates_2.9.1-2.0.jar ...
20[info]     [SUCCESSFUL ] play#templates_2.9.1;2.0!templates_2.9.1.jar (5540ms)
21[info] downloading http://repo.typesafe.com/typesafe/releases/play/console_2.9.1/2.0/console_2.9.1-2.0.jar ...
22[info]     [SUCCESSFUL ] play#console_2.9.1;2.0!console_2.9.1.jar (1694ms)
23[info] downloading http://repo.typesafe.com/typesafe/releases/com/typesafe/config/config/0.2.1/config-0.2.1.jar ...
24[info]     [SUCCESSFUL ] com.typesafe.config#config;0.2.1!config.jar (2681ms)
25[info] downloading http://repo.typesafe.com/typesafe/releases/rhino/js/1.7R2/js-1.7R2.jar ...
26[info]     [SUCCESSFUL ] rhino#js;1.7R2!js.jar (10764ms)
27.........................................................

这一个 sbt 下载了大量的依赖包,下载的文件有 63M 左右,文件存储在目录 ~/.ivy2/cache 目录中, 列举三个下载的 jar 文件完整的路径:
1~/.ivy2/cache/scala_2.9.1/sbt_0.11.2/play/sbt-plugin/jars/sbt-plugin-2.0.jar
2~/.ivy2/cache/play/play_2.9.1/jars/play_2.9.1-2.0.jar
3~/.ivy2/cache/dom4j/dom4j/jars/dom4j-1.6.1.jar

并且光一个 sbt 把 scala-2.9.1 的编译器的库,play 框架,还有第三方的许多依赖都下载过来了,所以通过这种方式,Scala 和 Play 框架都不需要事先安装好。

addSbtPlugin("play" % "sbt-plugin" % "2.0") 这样的写法连接起来的依赖与 Maven 中是一样的,各部分为 groupId % artifactID % revision。有时候会用 %% 代替这里的 % 来连接,%% 代表会附加上正在使用的 Scala 的版本号,这个版本号从 project/build.sbt 中的 scalaVersion 配置项读取。这里没有这个 build.sbt 文件, 当前的 sbt 默认了是 2.9.1。

要使用 Scala-2.9.2 需要在 project/build.sbt 文件中加上内容:
1scalaVersion := "2.9.2"

这样上面的 2.9.1 就会换成 2.9.2。

尝试过只通过修改 Build.scala 内容, 像更改 appDependencies 和 main 两个变量的定义,如下,来应用 scala 2.9.2, 最终未能成功

1val appDependencies = Seq(
2    "org.scala-lang" % "scala-compiler" % "2.9.2"
3)
4val main = PlayProject(
5   appName, appVersion, appDependencies, mainLang = SCALA
6).settings(
7   scalaVersion := "2.9.2"
8)

使用了上面的变量 appDependencies 和 main 后,执行 sbt 时取得的仍然是 Scala-2.9.1 的版本,不知道是在哪里出了问题。

而且即使在 build.sbt 中用 scalaVersion := "2.9.2" 表明了用 Scala-2.9.2, 只是保证 scala-compiler 和 scala-library 会取 2.9.2 的版本,其他的依赖可能还是取 xxx_2.9.1 的版本。 永久链接 https://yanbin.blog/play2-0-tutorials-cn-creating-application/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。