准备环境
安装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,显示窗口如下:
单击窗口右下角的Configure
,再单击Plugins
便可进入插件窗口。如果启动IDEA后直接进入了主界面,则单击主窗口左上角菜单File
-Settings...
,在弹出的设置窗口左侧单击Plugins
,则可看到如下插件窗口:
单击按钮Install JetBrains plugin...
弹出插件搜索窗口,输入scala
后结果如下:
选中窗口左侧的Scala插件,单击右侧Install
按钮,等待插件安装完成后重启IDEA。IDEA重启后,如果进入了上面提过的小窗口,则直接单击Open
按钮,如果直接进入了主窗口,则单击左上角菜单File
-Open...
,然后定位到Play项目目录,选中build.sbt
文件,单击OK,
接着会提示以项目方式打开还是以文件方式打开,单击Open as Project
,
取消Library sources
和SBT sources
左侧的复选框,如果Project JDK
右侧下拉列表为空,则单击旁边的New...
按钮新建一个,最后单击OK:
IDEA将会先进行项目构建,构建成功后显示项目主窗口:
如果修改了Play项目的某些配置,但是在IDEA中没有立即生效,单击右侧SBT projects
窗口左上角的蓝色刷新按钮 即可。
实际上Play项目并不依赖于IDE开发环境,上文中说过,Play项目其实是SBT项目,通过SBT在命令行可以完成Play项目生命周期的整个构建过程。也就是说你完全可以使用文本工具开发Play项目,然后在命令行进行构建。但是为了提高开发效率,还是建议使用IDEA进行开发,不仅有语法提示上的优势,在Play项目调试时IDEA将发挥很重要的作用。
通常的开发流程是:首先在命令行执行sbt run
,以开发模式启动项目,在浏览器中打开http://localhost:9000 ,然后在IDEA中修改代码,改完后直接刷新浏览器即可。IDEA中有时会出现一些报错信息,例如常见的模板引用错误:
这是由于模板函数index
是在项目编译过程中动态生成的,所以新增的模板函数在IDEA中会提示找不到,这时只要在命令行执行sbt compile
,然后在SBT projects
窗口单击蓝色刷新按钮,错误即会消失。如果你不是个处女座,建议忽略这些错误,只要命令行不报错即可。
OK,至此你的第一个Play项目之旅就结束了,下次再会!