前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Play For Scala 开发指南 - 第4章 第一个Play项目

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

作者头像
joymufeng
发布2018-05-17 15:53:46
2.7K0
发布2018-05-17 15:53:46
举报

 准备环境

 安装JDK8

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

代码语言:javascript
复制
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,然后执行创建命令:

代码语言:javascript
复制
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方法如下:

代码语言:javascript
复制
 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上传至服务器并解压,执行启动命令:

代码语言:javascript
复制
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。停止应用的命令如下:

代码语言:javascript
复制
cat ../RUNNING_PID | xargs kill

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

 重新发布项目

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

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

代码语言:javascript
复制
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运行更流畅,建议将内存尽量调大一点:

代码语言:javascript
复制
-Xms8g
-Xmx8g

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

start.jpg
start.jpg

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

plugins.jpg
plugins.jpg

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

scala.jpg
scala.jpg

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

open.jpg
open.jpg

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

open as.jpg
open as.jpg

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

sbt.jpg
sbt.jpg

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

main.jpg
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
error.jpg

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档