Play 应用程序可以由多个应用模块装配而成。这就允许你重用应用组件到多个应用程序中去,或把一个大的应用程序分散到多个小的应用程序里。
17.1. 什么是模块?
模块就是另一个 play 应用程序,一个模块在加载时会同时加载分散到各个地方的资源:
- 模板不能有 conf/application.conf 文件
- 模板可以有 conf/routes 文件,但这些路由不会被自动加载
- 在主程序路径下的所有文件都会被首先检索到, 然后再检索所有要加载的
模块
- 模板可以包含原始的 java 代码,前提是以 jar 文件形式打包到module/lib 目录下
- 模块可以包含文档页面
- 每个模块都是可选的
使用 play new-module 命令可以创建自己的模块。
17.2. 如何从一个应用程序里加载模块
位于应用程序/modules 目录下的模块是被自动加载,也可使用 dependency management system 来自动管理你的应用程序模块。
17.3. 从模块加载默认的 routes
模块可以提供一个默认的 routes 文件。使用如下的声明,可以把它加载到主应用程序的 routes 文件里:
# Import the default CRUD routes
GET /admin module:crud
下面的声明将加载所有的可用的模块:
GET /
module:*
17.4. 为模块增加文档说明
简单为模块添加 documentation/manual/home.textile ,可以为模块增加一个文档页面。play 的文档使用的就是相同的 Textile 语法,见:
${play.path}/documentation/manual/
如果你正在运行一个 play 应用程序,并且使用了多个带有文档的模块,那么本地的 play 文档(http://localhost:9000/@documentation)将包含这些模块的文档页面链接,具体位置是侧边栏的 Installed Modules 。
17.5. 使用模块仓库
module repository 定义了所有的通用分布式模块。一个模块可以拥有多个版本。你必须检查模块的文档,以确定哪个版本适用于你的框架版本。
使用 play list-modules 命令可以浏览模块仓库里的所有模块:
gbo-mac:~ guillaume$ play list-modules
~ _ _
~ _ __ | | __ _ _ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2, http://www.playframework.org
~
~ You can also browse this list online at
http://www.playframework.org/modules
~
~ [bespin]
~ Bespin online editor
~ http://www.playframework.org/modules/bespin
~ Versions: 1.0, 1.0.1
~
~ [cobertura]
~ Cobertura
~ http://www.playframework.org/modules/cobertura
~ Versions: 1.0
...
在本地使用 play install {module}-{version}命令可以在本地安装模块。在本地安装模块后就可以模块用于不同的应用程序, 而且不需要为每个应用程序复制备份。这对于大型模块来讲非常有用,这与框架扩展非常相似。
比如,在框架里安装 Scala 支持:
play install scala-head
我们约定 head 版本就模块的不稳定版本。你也可通过省略版本信息安装默认的模块版本,如:
play install scala
通过这种方式安装的模块将会直接下载模块到你的框架安装目录下的/modules 文件夹里。
使用—path 选项可以更改默认安装路径:
play install gwt --path=my-project
17.6. 贡献新模块到模块仓库里
先决条件
要注册一个新模块,以下步骤是必须的:
- 一个 Google 帐号,用于向 Google Group 传送内容
- 一个开发者 log-in OpenID (使用 Google account 也行)
- 模块名称要符合 [a-zA-Z]+ 正则表达式要求
- 模块必须包含有 documentation
- 有模块源代码主页和报送 bug 的渠道,比如 GitHub, Google Code 或 Launchpad 项目。
模块注册
使用 Google account 作为 OpenID,需要使用完整的 URL,步骤为:
- 在 https://www.playframework.com/modules 页面里, 在 Developer login 下输入 https://www.google.com/accounts/o8/id ,单击 Login 按钮
- 登录到你的 Google account
- 在 Developer login 下创建一个完整的 Google OpenID URL,如:
https://www.google.com/accounts/o8/id?id=BItOawk7q69CFhRarQIo
在 play-framework Google Group 页面里传送一个模块注册请求,比如:
Subject: Module registration request: {module name}
Module name:
jqueryui
Display name:
jQuery UI
Description:
Working examples of jQuery UI widgets, integrated with a Play application.
Project home page:
https://github.com/hilton/jqueryui-module
OpenID:
https://www.google.com/accounts/o8/id?id=BItOawk7q69CFhRarQIo
当模块成功注册后,就可以发布模块了。
发布你的模块
步骤:
- 在 conf/dependency.yml 文件的第一行设置模块版本号, 如:self: play -> jqueryui 1.0
- 用 play build-module 命令创建模块
- 在 Developer login 下, 登录到 https://www.playframework.com/modules
- 在 Your modules 下通过 https://www.playframework.com/modules/developers 浏览你的模块的页面
- 使用 Manage module releases 下的窗体上传你的模块(已经把你的模块 /dist 目录打包成普通的 zip 文件) 也可通过使用官方的 Google Group 提供的帮助来共享你的工作信息。