文档章节

Play For Scala 开发指南 - 第4章 第一个Play项目

joymufeng
 joymufeng
发布于 2017/10/20 10:04
字数 1804
阅读 249
收藏 0
转载请注明joymufeng,欢迎访问 PlayScala社区(http://www.playscala.cn)

原文链接:http://www.playscala.cn/doc/catalog?_id=j1_11

 准备环境

 安装JDK8

单击这里下载并安装JDK8,安装完成后在命令行查看Java的版本号:

C:\Users\Lenovo>java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

如果上面的命令执行报错,请手动将路径"Java安装目录/bin"添加至环境变量。

 安装SBT

Play使用SBT作为构建工具,一个Play项目其实就是一个SBT项目。单击这里下载并安装SBT。

 创建Play项目

有两种方式创建Play项目,一是直接下载官方提供的起步项目Starter Project,二是通过sbt命令行创建一个Play项目。

 下载Starter Project

打开Play Starter Projects页面,下载Play 2.6.x Scala Starter Example,下载后解压,目录结构如下:

根目录下的build.sbt文件表明这是一个SBT项目,另外还有一个sbt.bat启动脚本,说明Starter Project已经内置SBT构建工具,如果你已经成功安装SBT,则可以删除sbt-dist,sbt和sbt.bat。

 通过SBT命令行创建

这种方式需要你事先安装SBT,然后执行创建命令:

sbt new playframework/play-scala-seed.g8

命令执行成功后,在当前目录下会生成类似Starter Project的目录结构,表明项目创建成功了。

 启动Play项目

进入命令行,导航至项目根目录,执行启动命令sbt run:

第一次启动时,由于SBT要下载大量的依赖,所以时间可能会久一点,倒数第二行表明,Play项目已经在9000端口启动成功了。

Windows进入命令行小技巧:在文件夹窗口,单击地址栏,输入cmd并回车,命令窗口会随后启动并自动定位至当前目录。

Play并没有实现Servlet容器,而是使用Akka Http实现了一个高性能的Http服务器,所以Play项目的运行不依赖于Tomcat等Servlet容器。

由于SBT要从国外服务器下载依赖,所以第一次启动的时间会比较久,如果想加快启动速度请参考配置Repox社区公服

我们来看看效果吧,在浏览器中访问:http://localhost:9000

我们来试着改动下代码,使用文本工具打开app\controllers\HomeController.scala文件,修改index方法如下:

 def index = Action {
   Ok("Welcome to Play")
 }

再刷新下浏览器试试,

Play会自动加载修改过的代码,所以改完代码只需要刷新浏览器就可以了。

Play项目的默认启动端口是9000,如果想换成其它端口,在命令行中先执行sbt,进入sbt控制台后在执行run 9001


 发布Play项目

Play项目的发布也是通过sbt命令完成的,进入命令行执行sbt dist,命令执行完成后,在target\universal目录下会生成应用文件play-scala-starter-example-1.0-SNAPSHOT.zip,该应用文件解压后目录结构如下:

bin目录中包含了应用的启动脚本play-scala-starter-example,与项目名称同名。将play-scala-starter-example-1.0-SNAPSHOT.zip上传至服务器并解压,执行启动命令:

nohup ./play-scala-starter-example -J-Xms1g -J-Xmx1g -Dhttp.port=8080 > ../log.txt &

-J-Xms1g -J-Xmx1g参数指定运行内存为1g, -Dhttp.port=8080参数指定启动端口为8080。启动成功后,应用根目录下会生成一个RUNNING_PID文件,该文件保存了启动的进程PID。停止应用的命令如下:

cat ../RUNNING_PID | xargs kill

xargs命令将RUNNING_PID内容作为参数传递给kill。


 重新发布项目

当项目代码发生变动了,则需要重新发布项目。执行sbt stage命令,命令执行完成后,在\target\universal\stage\lib会生成如下两个jar文件:

将这两个jar文件上传至服务器覆盖同名文件,然后执行重启命令:

cat ../RUNNING_PID | xargs kill && nohup ./play-scala-starter-example -J-Xms1g -J-Xmx1g -Dhttp.port=8080 > ../log.txt &


 配置IDE开发环境

IDE建议选择IntelliJ IDEA + Scala插件。首先下载并安装IntelliJ IDEA 社区版,安装完成后,进入目录"IDEA安装目录/bin",修改文件idea64.exe.vmoptions调整启动参数,为了让IDEA运行更流畅,建议将内存尽量调大一点:

-Xms8g
-Xmx8g

保存配置,双击idea64.exe启动IDEA,进入插件管理(Plugin)界面准备安装Scala插件。如果是第一次启动IDEA,显示窗口如下:

start.jpg

单击窗口右下角的Configure,再单击Plugins便可进入插件窗口。如果启动IDEA后直接进入了主界面,则单击主窗口左上角菜单File-Settings...,在弹出的设置窗口左侧单击Plugins,则可看到如下插件窗口:

plugins.jpg

单击按钮Install JetBrains plugin...弹出插件搜索窗口,输入scala后结果如下:

scala.jpg

选中窗口左侧的Scala插件,单击右侧Install按钮,等待插件安装完成后重启IDEA。IDEA重启后,如果进入了上面提过的小窗口,则直接单击Open按钮,如果直接进入了主窗口,则单击左上角菜单File-Open...,然后定位到Play项目目录,选中build.sbt文件,单击OK,

open.jpg

接着会提示以项目方式打开还是以文件方式打开,单击Open as Project

open as.jpg

取消Library sourcesSBT sources左侧的复选框,如果Project JDK右侧下拉列表为空,则单击旁边的New...按钮新建一个,最后单击OK:

sbt.jpg

IDEA将会先进行项目构建,构建成功后显示项目主窗口:

main.jpg

如果修改了Play项目的某些配置,但是在IDEA中没有立即生效,单击右侧SBT projects窗口左上角的蓝色刷新按钮 即可。

实际上Play项目并不依赖于IDE开发环境,上文中说过,Play项目其实是SBT项目,通过SBT在命令行可以完成Play项目生命周期的整个构建过程。也就是说你完全可以使用文本工具开发Play项目,然后在命令行进行构建。但是为了提高开发效率,还是建议使用IDEA进行开发,不仅有语法提示上的优势,在Play项目调试时IDEA将发挥很重要的作用。

通常的开发流程是:首先在命令行执行sbt run,以开发模式启动项目,在浏览器中打开http://localhost:9000 ,然后在IDEA中修改代码,改完后直接刷新浏览器即可。IDEA中有时会出现一些报错信息,例如常见的模板引用错误:

error.jpg

这是由于模板函数index是在项目编译过程中动态生成的,所以新增的模板函数在IDEA中会提示找不到,这时只要在命令行执行sbt compile,然后在SBT projects窗口单击蓝色刷新按钮,错误即会消失。如果你不是个处女座,建议忽略这些错误,只要命令行不报错即可。

OK,至此你的第一个Play项目之旅就结束了,下次再会!

© 著作权归作者所有

joymufeng

joymufeng

粉丝 102
博文 74
码字总数 68460
作品 2
杨浦
高级程序员
私信 提问
Play For Scala 开发指南 - 第9章 Json 开发

Play Json 简介 Play 内置了一套JSON库,以帮助开发者简化JSON操作。目前Play的JSON库包含以下功能: Json对象与字符串之间互转 Json对象和Case Class之间互转 Json数据校验 Json格式之间互转...

joymufeng
2018/10/04
402
0
Play For Scala 开发指南 - 第8章 用户界面

Twirl模板引擎介绍 Twirl 是 Play 内置的模板引擎,负责数据层展示与用户行为收集。Twirl 被设计成一个独立的模块,可以脱离 Play 环境单独使用。Twirl 采用Scala作为底层模板语言,所以你无...

joymufeng
2018/10/04
83
0
在 Scala IDE 2.0 中设置和使用 Play Framework 2.0

本文将向你介绍如何在 Scala IDE 开发环境中设置并开始使用 Play Framework 2.0 . 前提要求 Eclipse 3.6.2 (Helios) 并安装好 Scala IDE for Scala 2.9 插件 (update site: http://download....

红薯
2012/02/17
3.7K
3
关于Play(Play 2.0 介绍)

Play 2.0 介绍 2007开始,我们一直致力于让Java开发web应用更容易。Play始于一个内部项目Zenexity,它深刻影响了我们开发web项目的方式:关注开发者生产力,遵循web架构的特点,并打破常规,...

大东哥
2012/03/19
1K
0
Scala 技术周刊 | 第 21 期

这里有最新的 Scala 社区动态、技术博文。 微信搜索 「scalacool」关注我们,及时获取最新资讯。 深度阅读 Play! Framework 系列(二):play 的项目结构 Play! Framework 系列 Scalameta tu...

ScalaCool
2017/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
42分钟前
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
8
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
78
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部