【Play framework 实用技巧】、模板项目

背景

刚作为新手那会儿,总是基于 Play 样例下载页面 的 play-java-seed 项目开发,每次都在重复工作:下载,解压,修改目录名,修改 build.sbt,增加模块,调整框架,……轮到真正写代码时,一天基本上废了。

后来重新看 Play 官方文档 时,发现忽略了一个 giter8 特性,这几天捡起来,真是很神奇的体验。

正文

  • 体验 g8
  • 制造 g8

体验 g8

首先需要安装 Java 开发环境 和 SBT,这样便可以在命令行运行 sbt 操作。

接着打开命令行——这在各个系统上是不一样的,但相同的是,SBT 可以依托于命令行界面:

【Play framework 实用技巧】、模板项目_第1张图片

确认 sbt 可用后,退出到普通命令行界面,然后创建 play 目录,用来管理 Play 项目:

【Play framework 实用技巧】、模板项目_第2张图片

在普通命令行中,切换到这个目录:

【Play framework 实用技巧】、模板项目_第3张图片

输入命令:

sbt new playframework/play-java-seed.g8

如图:

【Play framework 实用技巧】、模板项目_第4张图片

一般来说,新安装的 SBT 在运行时,显示信息不可能这么简洁,它应该要花费较长的一段时间,下载一些依赖到缓存库。有时候可能因为墙的原因,一些依赖会提示下载失败,但通常不会导致命令无效。

你现在可以输入 项目名组织名Scala 版本Play 版本SBT 版本

【Play framework 实用技巧】、模板项目_第5张图片

最后,你创建了基于 play-java-seed 种子的 play-demo 项目,它可以从 IDEA 中打开:

【Play framework 实用技巧】、模板项目_第6张图片

选择 红色箭头指向被圈中 的文件,点击 OK 按钮:

【Play framework 实用技巧】、模板项目_第7张图片

默认作为项目打开:

【Play framework 实用技巧】、模板项目_第8张图片

使用默认选项:

【Play framework 实用技巧】、模板项目_第9张图片

注意检查 JDK 环境是否为 1.8 及以上,我这里是家里电脑,所以是 1.8.0_152 版本,懒得升级。

在新的窗口中打开:

【Play framework 实用技巧】、模板项目_第10张图片

提示:基于 SBT 构建的项目有一个尿性,那就是:第一次编译很慢很慢。习惯就好。

编译完成后的项目结构:

【Play framework 实用技巧】、模板项目_第11张图片

我们将选中的文件或目录删除,以保证项目纯粹化:

【Play framework 实用技巧】、模板项目_第12张图片

创建一个运行任务:

【Play framework 实用技巧】、模板项目_第13张图片

步骤:

  • 点击 + 号
  • 弹窗中选择 Play 2 App
  • Name 处输入 APP
  • 检查 9000 端口(如果被占用请换一个)
  • 选择启动模块为 root

提示:这些步骤在 【Play framework 学习笔记】、新手入门 中都有提到,不理解的话,可以传送过去瞧瞧。

点击 OK 按钮之后,就出来一个:

点击运行按钮后,等待一段时间就自动打开网页:

【Play framework 实用技巧】、模板项目_第14张图片

好了,g8 的体验到这里告一段落,接下来我们自己做一个 g8

制造 g8

首先你要登录 GitHub 帐号,然后访问 play-java-seed.g8 主页,将它 Fork 为你自己的项目:

点击此项目的 branches

【Play framework 实用技巧】、模板项目_第15张图片

进入分支管理页面:

【Play framework 实用技巧】、模板项目_第16张图片

通常你没有 multi-module 这个默认分支,没有关系,你可以克隆项目,然后创建自己的分支推送上来。

推送成功后,你可以将自己的分支设为默认,这样让 giter8 在创建项目时,自动拉取默认分支的代码。

使用 sbt new mrzhqiang/play-java-seed.g8 拉取我的最新代码,你也可以将 mrzhqiang 替换为自己的用户名,只要你的帐号有 Fork 到 play-java-seed.g8 仓库,就没有任何问题。

multi-module

现在让我们简单说明一下,multi-module 这个分支是什么情况。

首先它是一个多模块项目:

【Play framework 实用技巧】、模板项目_第17张图片

多模块项目参考 【Play framework 文字页游2】、架构计划 中的【项目结构】部分。

根目录下的 build.sbt 文件内容揭示了这一切:

name := """play-seed-java"""
organization := "com.github.mrzhqiang"
version := "1.0-SNAPSHOT"
scalaVersion := "2.12.6"

lazy val util = project in file("modules/util")

lazy val core = (project in file("modules/core")).dependsOn(util)

lazy val framework = (project in file("modules/framework")).enablePlugins(PlayJava).dependsOn(util)

lazy val service = (project in file("modules/service")).enablePlugins(PlayJava).dependsOn(framework, core)

lazy val rest = (project in file("modules/rest")).enablePlugins(PlayJava).dependsOn(service)

lazy val root = (project in file(".")).enablePlugins(PlayJava).dependsOn(rest).aggregate(util, core, framework, service, rest)

// lazy val third = (project in file("modules/3rd")).dependsOn(core)

从上到下,它是一个逐步升级的过程,从底层的公共逻辑,到应用层的接口服务。

展开多模块部分,如下:

【Play framework 实用技巧】、模板项目_第18张图片

framework 模块扩展了 Play 框架的特性,比如 在过滤器中记录访问日志,以及 增加响应头中的版本号,其他的就是进行 错误处理(主动抛给服务端的错误,需要筛选出来,转换为客户端错误)、错误响应总过滤器

ErrorHandlerFilters 都要暴露给 root 中的 application.conf 知道,否则不会触发相应的逻辑。

util 模块只是一个单纯的 Java 项目,它仿照 Maven 结构建立,用来处理公共逻辑。

其他模块暂时不作解释,留待未来揭开它们的神秘面纱。

总结

一个精心组织的模板项目,可以节省下来大量时间,更专注于核心的代码实现,而不是结构设计。

你可能感兴趣的:(【Play framework 实用技巧】、模板项目)