文档章节

Play源码深入之一:从play命令开始

奋斗到天明
 奋斗到天明
发布于 2015/08/27 18:12
字数 541
阅读 212
收藏 0

Play的命令是借助python脚本,这从下载的play包就能明显看出来:一是其中有一个python包,里面是一个play自带的python环境,还有是play.bat文件:

@echo off
"%~dp0python\python.exe" "%~dp0play" %*

使用python运行play文件,而play文件里就是python代码。也就是我们平时用的play命令全作用于其中。用python来操作java项目管理是比较好的方法,我参与的两个大项目都是如此。

我们一起来看看python是如何操控java滴。 play文件中引入了commandLoader/application/utils等文件,他们位于/framework/pym下:

from play.cmdloader import CommandLoader
from play.application import PlayApplication
from play.utils import *

首先看看commandLoader,其主要作用是加载command文件下所有模块、命令等。 

在command文件夹中包含了在命令行中使用的所有命令,如:eclipse.py中,就是包含了eclipsify与ec,后者是前者的简化。对play项目进行了导入优化。其他如intellij.py/netbeans.py/ant.py三个文件都如此。

import os, os.path
import shutil
import time

from play.utils import *

COMMANDS = ['eclipsify', 'ec']

HELP = {
'eclipsify': 'Create all Eclipse configuration files'
}

def execute(**kargs):
...

这里重要是daemon.py与base.py。 daemon.py中含有start/stop/restart三个关于应用开关的命令。在自己的项目中我们也可以借鉴他的实现方法。

COMMANDS = ['start', 'stop', 'restart', 'pid', 'out']

HELP = {
'start': 'Start the application in the background',
'stop': 'Stop the running application',
'restart': 'Restart the running application',
'pid': 'Show the PID of the running application',
'out': 'Follow logs/system.out file'
}

base.py中含有 run/new/clean/test等命令。

COMMANDS = ['run', 'new', 'clean', 'test', 'autotest', 'auto-test', 'id', 'new,run', 'clean,run', 'modules']

HELP = {
'id': "Define the framework ID",
'new': "Create a new application",
'clean': "Delete temporary files (including the bytecode cache)",
'run': "Run the application in the current shell",
'test': "Run the application in test mode in the current shell",
'auto-test': "Automatically run all application tests",
'modules': "Display the computed modules list"
}

utils.py中是能用辅助模块,从名称就可以看出来。像获取java版本、play版本、将项目打包成war等。 appliction.py是应用辅助模块,包括对应用文件、模块的检查、添加jar包等方法。其中也包含python操作java的java_cmd方法。 

一个play start demo 流程: cmd输入 -> play文件中 -> daemon.py -> appliction.py -> java

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
Play源码解析计划

最近有想法看看Play的源码,以提高自己的编码水平。之前都是东看看,西看看。最后看来去却好像无所大成。有人说过,伤敌十指,不如断敌一指,于是我有开始了学习之路。 原计划是采用1.2.3版本...

刀狂剑痴
2015/08/27
143
0
中英文对照 介绍Play Framework 框架 安装向导(Installation guide)

安装向导 h1. Installation guide 先决条件 h2. Prerequisites 想要运行Play框架,你需要Java 5或更高,如果你想从源码编译Play,你需要"Bazaar source control client":http://bazaar-vcs....

lyuehh
2010/07/13
1K
2
Play源码深入之二:Play应用启动时框架的初始化

接着上篇在python的辅助下,理理输入启动命令之后,play框架进行的初始化工作。 application.py中的javacmd方法中就有play.server.Server。 def javacmd(self, javaargs, cp_args=None, clas...

奋斗到天明
2015/08/27
0
0
SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play

SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play 前言:本章内容梳理SRS接受到rtmp信息之后,如何转发出去。同样这里先做代码梳理,本人也在源码熟悉之中,可能很多网友朋友最关...

manageruser
2017/07/07
0
0
Play 1.x框架学习之七:多数据库切换与源码修改 ( Databases Switch And Modify Source Code)

在单数据源(单个ip)下的多库,可以使用use xxdb 命令进行切换,但是如果多个数据源的情况下,use命令就不行了。在play框架中,提供了多数据源多库的切换。本文不提供完全的例子,只提供部分...

奋斗到天明
2015/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

svn 常用操作命令及问题处理

1. 常用命令 1.1. 基本使用 检出 checkout ➜ svn co repo_url -m '检出代码'➜ svn co repo_url saved_dir_name -m '检出代码,并指定目录名' 加入版本控制 add # 添加指定文件➜ svn...

whoru
26分钟前
3
0
记一次jquery validate的扩展(第一次失去焦点时触发校验)

最近在用jquery.validate 做前端表单校验,但是发现每次第一次失去焦点时,如果文本框内容为空,且该字段是必填项, 则不会触发校验,直到提交表单后,再次失去焦点时,才会触发,想对此进行...

foreach
30分钟前
1
0
java生成UUID

UUID介绍: UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以...

编程SHA
33分钟前
1
0
Docker Compose 原理

Docker 的优势非常明显,尤其是对于开发者来说,它提供了一种全新的软件发布机制。也就是说使用 docker 镜像作为软件产品的载体,使用 docker 容器提供独立的软件运行上下文环境,使用 dock...

Java干货分享
47分钟前
0
0
解决过滤器中设置cookie无效的问题

解决过滤器中设置cookie无效的问题 代码现场 filterChain.doFilter(sessionSyncRequestWrapper, response);Cookie emailCook = WebServletUtil.getSelectedCookie(request.getCookies(), ......

黄威
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部