17.Play模块和模块仓库
Play应用程序可以由多个应用模块装配而成。这就允许你重用应用组件到多个应用程序中去,或把一个大的应用程序分散到多个小的应用程序里。
模块就是另一个play应用程序,一个模块在加载时会同时加载分散到各个地方的资源:
- 模板不能有conf/application.conf文件
- 模板可以有conf/routes文件,但这些路由不会被自动加载
- 在主程序路径下的所有文件都会被首先检索到,然后再检索所有要加载的模块
- 模板可以包含原始的java代码,前提是以jar文件形式打包到module/lib目录下
- 模块可以包含文档页面
- 每个模块都是可选的
使用play new-module命令可以创建自己的模块。
位于应用程序/modules目录下的模块是被自动加载,也可使用dependency management system来自动管理你的应用程序模块。
模块可以提供一个默认的routes文件。使用如下的声明,可以把它加载到主应用程序的routes文件里:
# Import the default CRUD routes
GET /admin module:crud
下面的声明将加载所有的可用的模块:
GET / module:*
为模块增加文档说明
简单为模块添加documentation/manual/home.textile ,可以为模块增加一个文档页面。play的文档使用的就是相同的Textile语法,见: ${play.path}/documentation/manual/
如果你正在运行一个play应用程序,并且使用了多个带有文档的模块,那么本地的play文档(http://localhost:9000/@documentation)将包含这些模块的文档页面链接,具体位置是侧边栏的Installed Modules 。
modulerepository 定义了所有的通用分布式模块。一个模块可以拥有多个版本。你必须检查模块的文档,以确定哪个版本适用于你的框架版本。
使用play list-modules 命令可以浏览模块仓库里的所有模块:
gbo-mac:~ guillaume$ play list-modules
~ _ _
~ _ __ | | __ __ _| |
~ | '_ \| |/ _' | || |_|
~ | __/|_|\____|\__ (_)
~ |_| |__/
~
~ play! 1.2, http://www.playframework.org
~
~ You can also browse this list online athttp://www.playframework.org/modules
~
~ [bespin]
~ Bespin onlineeditor
~ 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
先决条件
要注册一个新模块,以下步骤是必须的:
- 一个Google帐号,用于向Google Group传送内容
- 一个开发者log-in OpenID (使用Google account也行)
- 模块名称要符合 [a-zA-Z]+ 正则表达式要求
- 模块必须包含有documentation
- 有模块源代码主页和报送bug的渠道,比如 GitHub, Google Code 或 Launchpad项目。
使用Google account作为OpenID,需要使用完整的URL,步骤为:
- 在http://www.playframework.org/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 aPlay 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下,登录到http://www.playframework.org/modules
- 在Your modules下通过http://www.playframework.org/modules/developers浏览你的模块的页面
- 使用Manage module releases下的窗体上传你的模块(已经把你的模块/dist目录打包成普通的zip文件)
也可通过使用官方的Google Group提供的帮助来共享你的工作信息。